{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Rotation Matrices "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "from math import cos, sin, radians\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x10df045d0>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.manual_seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2D Rotation Matrix: [cos(theta) -sin(theta)\n",
    "#                      sin(theta)  cos(theta)]\n",
    "def rotation_matrix_2d(theta):\n",
    "    \"\"\"\n",
    "    theta: angle in degrees\n",
    "    Returns the 2D matrix that performs in-plane rotation by angle\n",
    "    theta about origin.\n",
    "    This means, multiplication with this matrix will move a point\n",
    "    to a new location.\n",
    "    The angle between\n",
    "        the line joining original point with origin\n",
    "        and\n",
    "        the line joining new point with origin\n",
    "    is theta.\n",
    "    \"\"\"\n",
    "    return torch.tensor([[cos(radians(theta)), -sin(radians(theta))],\n",
    "                     [sin(radians(theta)), cos(radians(theta))]])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Rotation by angle θ in 3D space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rotation_matrix_3d(theta, axis):\n",
    "    \"\"\"\n",
    "    theta: angle in degrees\n",
    "    axis: Axis of rotation, can be 0, 1 or 2 corresponding to x, y or z\n",
    "          axis respectively.\n",
    "    Returns the matrix that will rotate a point in 3D space about the\n",
    "    chosen axis of rotation by angle theta degrees.\n",
    "    \"\"\"\n",
    "    if axis == 0:\n",
    "        return torch.tensor([[1, 0, 0],\n",
    "                         [0, cos(radians(theta)), -sin(radians(theta))],\n",
    "                         [0, sin(radians(theta)), cos(radians(theta))]])\n",
    "    elif axis == 1:\n",
    "        return torch.tensor([[cos(radians(theta)), 0, -sin(radians(theta))],\n",
    "                         [0, 1, 0],\n",
    "                         [sin(radians(theta)), 0, cos(radians(theta))]])\n",
    "    elif axis == 2:\n",
    "        return torch.tensor([[cos(radians(theta)), -sin(radians(theta)), 0],\n",
    "                         [sin(radians(theta)), cos(radians(theta)), 0],\n",
    "                         [0, 0, 1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original vector\n",
      "tensor([[1.],\n",
      "        [0.],\n",
      "        [0.]])\n",
      "\n",
      "Rotation matrix for 30.0 degrees around Z Axis is\n",
      "tensor([[ 0.8660, -0.5000,  0.0000],\n",
      "        [ 0.5000,  0.8660,  0.0000],\n",
      "        [ 0.0000,  0.0000,  1.0000]])\n",
      "\n",
      "Vector after rotation\n",
      "tensor([[0.8660],\n",
      "        [0.5000],\n",
      "        [0.0000]])\n",
      "Angle between the two vectors 30.000001781168113\n"
     ]
    }
   ],
   "source": [
    "# Let us consider the vector [1, 0, 0]\n",
    "import math\n",
    "u = torch.tensor([1, 0, 0], dtype=torch.float)\n",
    "u = u.reshape((3, 1)) #Reshape it to represent a row vector\n",
    "print(\"Original vector\\n{}\\n\".format(u))\n",
    "# Rotate it by 30 degrees around Z Axis\n",
    "angle_of_rotation = 30.0\n",
    "R = rotation_matrix_3d(angle_of_rotation, 2)\n",
    "print(\"Rotation matrix for {} degrees around Z Axis is\\n{}\\n\".\\\n",
    "      format(angle_of_rotation, R))\n",
    "v = torch.matmul(R, u)\n",
    "print(\"Vector after rotation\\n{}\".format(v))\n",
    "\n",
    "\n",
    "def get_angle(u, v):\n",
    "    \"\"\"\n",
    "    Computes angle between two vectors using arc cosine\n",
    "    \"\"\"\n",
    "    u = torch.squeeze(u)\n",
    "    v = torch.squeeze(v)\n",
    "    assert len(u.shape) == 1 and  len(v.shape) == 1\n",
    "    return math.degrees(math.acos((torch.dot(u, v)\n",
    "                                   / (torch.linalg.norm(u) *\n",
    "                                      torch.linalg.norm(v)))))\n",
    "    \n",
    "\n",
    "# Angle between u and v\n",
    "angle_u_v = get_angle(u, v)\n",
    "print(\"Angle between the two vectors {}\".format(angle_u_v))\n",
    "assert np.allclose(angle_u_v, angle_of_rotation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOydeZwcdZ33P9V3z9EzyVyZzD2ZHEOSyeS+Ib5kw6LuPsgDsqyPoiiux6MgIB6PGFlwWWVdUFkBRZYVRVAg6oq4csUkGK6QBJKZ6Z6e6bnvmZ7p+6iuev6Y/CpV1dV3dfdM5vd+vfKCdHqqqrun6/f5fY/Pl+F5ngeFQqFQKJQliybfF0ChUCgUCiW/UDFAoVAoFMoSh4oBCoVCoVCWOFQMUCgUCoWyxKFigEKhUCiUJQ4VAxQKhUKhLHGoGKBQKBQKZYlDxQCFQqFQKEscKgYoFAqFQlniUDFAoVAoFMoSh4oBCoVCoVCWOFQMUCgUCoWyxKFigEKhUCiUJQ4VAxQKhUKhLHGoGKBQKBQKZYlDxQCFQqFQKEscKgYoFAqFQlniUDFAoVAoFMoSh4oBCoVCoVCWOFQMUCgUCoWyxKFigEKhUCiUJQ4VAxQKhUKhLHGoGKBQKBQKZYlDxQCFQqFQKEscKgYoFAqFQlniUDFAoVAoFMoSh4oBCoVCoVCWOFQMUCgUCoWyxKFigEKhUCiUJQ4VAxQKhUKhLHGoGKBQKBQKZYlDxQCFkgV4ngfHceB5Pt+XQqFQKAnR5fsCKJSLDY7jwLIs/H4/GIaBVqsV/mg0Gmg0GjAMk+/LpFAoFAEqBigUlSAiIBKJCJEBAGBZFgAwOTkJrVaLiooKaLVa6HQ6QRxotVoqECgUSt6gYoBCyRCe5wUR8Morr2DXrl0wm81CBIAs8m63GwzDoLy8HOFwGKFQCACE54gjCCSKIP55CoVCyRZUDFAoacLzPCKRCFiWBcdxYBgGkUgEABCJRDA1NYWCggIUFBQIEQCe56HVaiXHIH9YlkU4HBYWf4ZhoNFooNPpJCkGmmagUChqQ8UAhZIiJAUQDoeFAkHxAj0yMoLBwUFoNBph919YWAiO46DX6zE3N4fCwkLodDrFnT85JjlPIBAQ/o2ch6YZKBSKmjA8LXemUJKCLM4kEgBcCPHzPI/x8XGcPn0aZrMZ69atQ0lJCQDA7/fD4/FgcHAQwWBQEBIFBQUoKipCUVERiouLUVRUBKPRGPf88j/iayDigKYZKBRKqlAxQKEkgbw4UBwJcDqdsFqt8Pv9CIfD2LlzJywWi6QmAAB6enoQDoexbt06BINBeDweuN1ueDweeDwe+Hw+GAyGKIFQUFAQc0FXEgjkuR6PBzqdDiUlJTTNQKFQ4kLTBBRKHJREgEYzb8/h8Xhgs9kwPT2NpqYmNDY24ujRozGPRSIIAGA0GmE0GlFWVib8O8uy8Hq9gkAYGBiA1+sFAIk4KC4uRmFhoZAaiJVmGBkZEc5DUEoziKMIFAplaULFAIWigLhDgOy2yZ9AIICenh4MDw+jtrYWl156qbDgihd8OfH+DYCwiyfpBWBejPh8PiGKMDExgZ6eHrAsi8LCwqgogsFgkBQgMgwDvV4vvCbyR6mbgaYZKJSlCxUDFIoIpQ4B8odlWTgcDvT19aG8vBx79+5FYWGh5OczEQNKaDQaYcFfsWKFcI3iNIPL5cLw8DACgQCMRqPwfL/fL3QwiF+H/PWKBQJ5jDyXdjNQKEsDKgYoFMTvEOA4DoODg7Db7SgsLMS2bduwbNkyxeOks+CnCsMwMJlMMJlMKC8vFx5nWVZSg+DxeDA7O4uxsTHFNEOsnb+4m4EIIwJNM1AoFydUDFCWNOIOgTNnzqCmpgZlZWXCoj42NgabzQaGYbB+/XpUVlbGXfTUjgykgk6nw7JlywShQkL/VVVVQhRhbGwMdrsdkUhEMc2g1+ujfA4ISmkG8lxxi6O45ZGmGSiUxQEVA5Qlidjoh9QFeL1esCwLhmHgdDrR1dWFQCCAlpYW1NTUSBbGWIgXfPnin4uogfxaGIZBcXExiouLUV1dDWD+tQcCAUEgzM7OCm2PJpNJIg6KiopgMpmSSjMMDw9jbGwMbW1tNM1AoSwyqBigLDlidQgwDAO/34933nlH0iGg0yX/NclnZCBZGIaB2WyG2WxGRUWF8Hg4HJakGSYmJuDz+aDVaqPSDMRVUSwQyN/J+xUvzSAWCDTNQKHkHyoGKEsGEgkgi5O8Q8Dv98Nms6Gurk7SIZAKicRArklFfOj1eixfvhzLly8XHotEIvB6vUIUYWRkBB6PBxzHCZEDIhCIFXMyaYZQKCTxRBB3McinO1KRQKFkHyoGKBc9yXYIaDQatLS0YNWqVWmfayFFBtRYRLVaLSwWCywWi/AYz/OCq6Lb7cbMzAz6+/sRCoWg0Wjw3nvvSaIIpN0xmW4GUsAZK80Qy1uBQqFkBhUDlIsWJREg7hAYGBhAT08PCgsLsX37dtjtdhgMhozOmWjBXwhpgkxhGEYYwFRZWSk8Pjg4iJGREVgsFng8HoyNjcHn80Gv1yumGeIJBPJfmmagUHIDFQOUiw6lGQJksZB3CGzYsAEVFRXCokSeny7xjpGPmoFcnk+n08FgMKChoUF4LBKJCDUIbrcbQ0ND8Hg8ABCVZigqKpIMXEomzUA8H4jlsjzNkEzRJ4VCoWKAchEhDjfLBwkBwMzMDKxWa8wOAWLQkwnpth1eDCi9Nq1WG+WqyPM8fD6fUKw4NTUFh8MhGd4kTzMAUIwiOJ1OlJSUxEwzyAUCTTNQKMpQMUC5KIg3SEhphoBSh4Aai7VGo1kwkYGFuuAxDIPCwkKJeyPZ7ROB4HK5MDIyAr/fD4PBIGl1LC4uhtlsFt5PssiLj0X+y7Ks4KwoTkvQNAOFIoWKAcqihogAu92OmpoaGI1GSYeA3W7HyMhI1AwBJdRIEwDSHbK4Yp4SG4ZhhKFKcldFcZphYGAAHo9HsGkOBoOYmZmBwWCQDG8ix8y0m4GmGShLBSoGKIsSsWEQx3FwOByoqKiAyWRKaoaAEmpFBmIdQ400RKos9rSETqdDaWkpSktLhcfI8Ca3243u7m7BcjkSiSimGcigpnS6GWiagbJUoGKAsqiI1SGg0WgQiUTQ398v6RAQLyKJUKtmYKF0E+SjRiEXi6R4eFNfXx9aWlqwbNkyBINBIc0wOzuLoaEhYXiTPM2QyFWR/FcpzeB2u1FSUgKDwRDliUChLFaoGKAsCuINEiI7u9OnT0On00k6BFJBrW6CheIzkGvy8drEu3gyvEnuqihOM0xNTcHr9UKj0UiiB0VFRZLhTUDsNMOZM2fQ3t4uiTbRNANlsUPFAGVBo9QmqNQhEA6H0djYiDVr1qR9A852ZOBiby3MB4lqMvR6vWR4EzCfZvB6vUIUQeyqSIY3iSMJ8jQDz/PQ6/XQ6XSKw5vEz6VpBspigYoByoIl2Q6B5uZmhMNhlJeXZ7QTUzMy4PV60dPTI+xAi4uLMzouJTapLqxKnwkZ3kQEwszMDAYGBoThTWJxIP4diZdmIL+/8boZaJqBslCgYoCy4Ig1SAhAzA6BsbGxrIb4U7n28fFx2O12rFixAgAwNjaG7u5u4fo6OzuFxYgY7WSDfCwuuT6nWpEP8fAmsatiKBSSpBkmJiYAAG+//XZUmkE8vAlA1Ocq72YQo5RmEHdGUCjZhooByoJB3iEgtg8WdwhUVFREdQhkuxMgEaR4cWJiAmazGXv27IHRaEQkEhGOOzY2hp6eHhgMhiijHbE4EFfAZ0ou0wT5rBnIFgaDQTK8ieM4HDlyBOvXrxfGQItdFZXSDMTTIpluBppmoOQLKgYoeSfVGQJKHQLxzH6SJZ00Ac/zGB0dhc1mg8FgQFlZGUpKSlBUVCSEh8mxTSYTNBqNMAhJbLTjdrsxNzcnVMCbTCZhUSF/yMAfygVy7eNABI/FYkFZWZnkcb/fL3FV7OvrQygUgtlsjupmSDS8CZCmGex2O8rLy7F8+fK4Ex4plHShYoCSN0hxoDhkmswMASXUEAOpRgbE9sZr1qzBypUr0dHRkXQBYSyjnXA4LCwqbrcb4+PjwsAfeQSBOPHFOt9SIJevU1zEKr8GMrypqqpKeDwYDAqfo3x4k1KaQSwOxGkGj8eDsrIyQbCScdEEIhB0Op0gDmiagZIKVAxQco64Q2BgYAATExPYunVr0jMElFArMpCMGPB6vbDZbJiamkJzczMaGxuFG7ca3QR6vV4SmgYuDPwhUQS5E584gkBy18DS6CbIx/mSXWSJ2BNHEViWlXQzDAwMwOv1AkBUioHUlHAcp9iqSNMMFLWgYoCSU5SKA0mo1+PxwGq1YmZmBs3NzWhoaFCcIaCEGjUDidIEoVAIPT09GBwcxMqVKxXtjcXXobR7TBelgT+xWuR4nkdhYaHw/s7NzWW1UFFMPgoI85EmyKRrRafTKX6W4jTDxMQEent7hZqSYDCIyclJQfzFG96UqJuBphkoSlAxQMkJsToENBoNWJbF2bNnhQ6Byy67TLjZJUs20wQcxwnOhqWlpdi9e3fMVkGxGJAfS22fgVgtcmRRGRoagt/vx7vvvotwOCwpbiO7T7UKFcm588FCSBNkikajURzeRNIMHR0d8Pv96OrqQiAQkAxvIv8lKaNE3Qw0zUBRgooBSlYhHQIsywKQ9lqzLIvx8XHMzc3BbDYnPUNAiWwUEIrrFnQ6Hdrb2yW5/WSOISfbC6Y4d+3z+eD3+9Ha2irJXc/OzmJwcDCqh56IhHjDnBYa+UgT5GqBFLsqajQatLS0wGKxCMObSBShr69PcFVUSjOQKEaq3QyRSAThcBglJSWSKAJNM1ycUDFAyQpKHQLkD+kQsNvtMBqNMJvNaG9vz+h8aqUJyDGcTqewC1u9ejVqamqSugEuNAdCcl6yqCgVKpJFhRQqGgyGqAhCvELFfJKPNEE+LIbJdwhIPLyJFCp6PB5heJM8ipBoeBMwX7vjcDiwZcuWKItmmma4+KBigKIqYhGgNEOA7LQ1Gg02btwIjUaDjo6OjM+rVpqAZVmcPn0ak5OTaGpqQmNjY9J1C8DCFAOxUCpUFBe3ud1uYdep1WqjpgGKCxXzQarFfGqdMx+LHikgjIV4eBOBuCoqRYTEw5vIf8XDmwharRZ6vV6S+hKnGcj7QdMMix8qBiiqkOwMAXmHgNPpzHgRBzIXA+FwGKOjo3C5XLBYLNi/fz9MJlPKx0kkBnJJOueLVdwWr1CRRBACgYCal580S0EMpBORELsqKg1vIp/n5OQkfD5flOALBAKSiID4v+LrSrabgaYZFjZUDFAygtwISHEgIBUBiToE1NjRk3OmcxyxqZHJZEJhYSE2bNiQ0XXE27EuxkFFsQoVxWHpiYkJzM3NgeM4vPHGG1F1CKlEV5IlH1EWcbg+V5DvmFpRGKXhTZFIBF6vV7BeHhkZgcvlAs/zePPNN6OiCMm6KpJuBppmWPhQMUBJm3iDhOQzBGJ1CKglBjQaTVSFdDx4nsf4+LiQsmhrawPHceju7s7oOhZTmiATGIaJqn7v7++H0+lETU1NzEJFcR1CpoWKSyVNQL4f2UzJaLVaWCwWWCwW4bGBgQHMzMxg5cqVcLvdmJmZQX9/P0KhUFThKfk8E7kqiiOIBHLfoGmG/ELFACVlSPva5OQkKisrozoEent70d/frzhDQI6aYkBs/xuP2dlZWK1WeL1eoThQo9FgcnIy6yOMgdwtKPlIS2i1WlRUVEjC0sRymYSmiQufvD2uuLhYyFsnQ77EQK7rJLLVzpjMefV6PSorKxWHN8kLT/V6fVRdidlslmwS5G2PSmmG6elphMNhrFy5kqYZcggVA5SkERcHut1unD17Fu9///ujOgSKiopizhCQQ8RApgtkMqLC5/PBZrNhcnISjY2N2Lp1a1TKQk0xEMt0KJe7y4UQiSAzG+QufGJHxenp6ahCRfk0wFjk2mfgYowMxDqv0jnlw5uACw6Z5I98eJNYIBQWFsZNM3i9XgSDQQCImWYgI6DFfiVUIGQGFQOUhCi1Cep0OuEmNTo6iu7ubqFDIN4MATli29xsiYFwOCxEK1asWBGzODDdugP5MZKJDFysJPsZxmqPE3cyiBcU+Y6TOCzmmnymCfJx3mRdK5UcMkldCRF98kmd4sFN4rQRx3HCYi8+Fvkvx3GSYlWaZlAHKgYoMVHqEBB/8TiOw+uvvy704q9cuTLl3Qt5fqLWqUQoLcIcx2FwcBB2ux3FxcXYtWuXJCeazDEyuQ4S/hT/Wy7JR6FbJiRbqNjT04NIJAKz2QwAGB4ehsViyVqhoph8pAnk9Ti5IhKJZGRhLa4rIcObeJ6XpI08Hg9GR0fh9/sFfwtSk+Dz+aJcFZNJM5DnkU2LuGCRphliQ8UAJYpEbYJutxtdXV0AgIqKCjQ1NaV90xCLgUwQRwZ4nsfExASsVisYhkk6WqFWmiDRa8nljnaxRyGUChVJ/zwxhiKFivJxweLRz2qRr8hAvoyO1LSrBmJP6iRpI4/Hg8HBQbhcLrz55pvC5y+PCokHgyVqd5Sfn6YZlKFigCIh2Q6BmpoaTE9Po6GhIaPdg9piYG5uDl1dXfB6vWhpaUFtbW3SN1KaJlgckP558rkS8yqy4yS7TvGOU97JkEqhoph81QzkY6HKNDKQCuK00czMDJYtW4aamhpJmoFEhViWlczZIOmGZIY3JZtmEEcRlgpUDFAAxB4kBECxQ8BsNmNwcBCRSCSj3QP54ma6CJOixjfeeEOxODAZ1IgMxDtGrsVAPm5kua7sF58zVqGiuJNhampKKFSURxAKCgoSXv9Siwzk47xEhIhdFVesWAHgwvAm8pnOzc1haGgIgUAARqMxqrZE7qoYL80wPDyMsbExbNy4UfgZh8OB3//+9/jWt7510QsDKgaWOGLDILIDIYpYnHNX6hBQYxEHUvcIEEOEisPhgE6nw/79+4Vccqqo9XrIIuXz+eDz+WCxWKDT6S76yEC+DJXi3aR1Ol1Mgx2yoCgVKop3nOIFMV+thfkSA7mKDIiJF5FgmAtzNpRcFeWiTz68iaQZlIY3kc9Wp9MJAqGrqwu/+c1vcOjQoey/8DxDxcASRalDQDxDIJkOgUwWcflxUl2EOY7D0NAQ7HY7CgsLsWbNGoyOjqYtBAB1CgjJe9LZ2YnBwUHodDqEQiFhWAwAzM3NYfny5VkvdgMuXuEBpL9LVzLYIYN+xF4IZNCPOCSdD8vlfA1HikQii0aEKLkqym20x8bG0N3dDY7jFNMMkUhEEO3k98rr9cYcV36xQcXAEoPkzMLhcNQgIUA6QyDRtD7SUZApqRyH53lMTk7CarWC53msX78elZWVmJqaUqXugJwj3Xzy1NQU3G43jEYjdu7cCYPBIISq3W43AMBms0mK3cR/1CzYutjDmoB6rzFWSDoQCAif3czMDGZnZxGJRPD6669H7TjVLFQUs9TSBCzLqnLeWN0p5DP1eDxwOp0YGBhAMBgUigodDge8Xi9MJpMwq2QpQMXAEoGIgNnZWcEyVt4hYLPZ4HQ6hWl9idS5mu6ByRzH5XLBarXC5XKhpaUFdXV1knCfGp0AQOo7E57nMTU1ha6uLqHlbdu2bYhEIgiFQpLqaYfDga1bt0Kr1QqLjMvlwvDwMAKBQJRtbzYXmcVOtqMepFDRbDYLDnwDAwNwOp2ora2N+uzkkwCLi4sFi95MyFcBYb7SBMRnIBsofabAvKui1WpFKBSCz+fDf/3Xf+GnP/0pCgoKUFhYiNtuuw3t7e1ob2/HunXrUhbt9957L5577jl0dXXBbDZjz549+O53v4u1a9fG/bnf/OY3uPPOO9HX14fVq1fju9/9Lj7wgQ+k9doTQcXAEkBcHOjxeDAwMIC6ujoA0g6Buro6bNy4MenFR6vV5iRNEAgE0N3djdHRUTQ0NKC9vT3qy6iGMEknp+92u2G1WjE3N4eWlhaYzWbYbLa45+B5XrHYLRwOCzsWl8sl2PaKFxnST28wGJJaIHKdJsh1AWE+vBR0Ol3MQkX5JECdTqc4+jmV685nId9SOa/BYIBOp0NhYSGam5tx33334dChQzh06BA6OjoQDAbxyCOP4MyZM3j/+9+P3/72tykd/y9/+Qu+8IUvYPv27WBZFt/4xjdw8OBBdHR0xLRr/+tf/4rrr78e9957Lz70oQ/hySefxFVXXYV33nkno2FqsaBi4CJGqUNAr9cjEokgHA7D4XAIHQL79u1DQUFBSsfPdmSAZVk4HA709fUlvEY1rkWcJkhEKBSC3W7H0NAQ6urqsGnTJuj1ekxNTcUtbIsXwdDr9VE2r/Jq+MnJSXi9Xuj1+qgIQrrtcmqRj/qEhdLml6hQ0e12Y3BwEF6vFwzDxC1qUzrnUkkTkFqmfBUuiiMSRUVFYBgG27ZtwwMPPAAAQvtyqvzpT3+S/P3xxx9HZWUlTp48iUsvvVTxZ37wgx/gb//2b/GVr3wFAHD33XfjxRdfxIMPPoiHH3445WtIBBUDFyHyDgG561YwGMTRo0dRXFyMHTt2SCxEUyFbBYQ8z2NoaAjd3d0oKChIas6BWh4BQHzPA47j0N/fj56eHixbtixqEJN8sVeaT5DKohlrkRH7+vf19Una5cgfcV3IxchCtyOOV6gYq6hN/PkRD/98FRDmI01Avnv5EAMsy0ad1+PxSNIJGo1G8l1MFyIoxMJfzokTJ3DrrbdKHrviiitSjkokCxUDFxHJdAiQvHZ7ezvKy8sz2lmpVUAoFgOkOJDjOFxyySWoqqpK6hrV8ggAlBcZsauhRqMR3j85iRZ7NXaySj7w8l3owMCA0C73zjvvSBaZVMPUC5V8pQkyWZjFhYriY/r9fklbXF9fn9CFQn63Z2ZmVC8yjUc+wvVkc7FQWhrdbrfq3QQcx+GWW27B3r1744b7x8bGBBtnQlVVFcbGxlS9HgIVAxcBiToEpqenYbPZEAgEUF9fD7vdLunRTRc1awZ8Ph/eeustuFwurFq1CvX19SndiNSsGZAfx+12o7OzEx6PJ6GrYTI7/2zsaJV2oUNDQxgbG8OKFSskg3/EYWqxQMjH7jMT8iUG1D4nwzAoKChAQUGBZBdKzHUGBwfh8/nQ1dUlKVQU+yGoUagohvTZ53pRJveTfHUxyAsX3W636t0EX/jCF3D27FkcP35c1eNmChUDi5hkZgjIOwTC4TC6u7tVuampsQAHAgF4PB5MT0+jvr4emzZtSqt6Xq36BfFiHgwG0d3djZGRETQ0NGDz5s0Jd2XJRAZyFd4mBiorV64UHhOHqd1uN0ZGRuDxeMDzfJRAiJfHjsXFPowpl5X9pAvF5XLBZDKhtbVVMNchn9/ExIRQQyL//MiQn3TI19hksjtfKPbLbrc77TSqEv/3//5f/OEPf8DRo0dRW1sb97krVqzA+Pi45LHx8XGh9VVtqBhYhBDVHm+GAKm+l3cIkC+5vFgmHTJ1Duzr6xOcAxsbGxO22cRD3AmQyY2EvKbe3l709PSgvLw8peLKhSQGgOgohDhMXV1dLTxHLBDEeWwlgRBrt5gvB8JcnzOfDoRK5jriGhLSLeTxeBK678UjXzv0fBUPArEjA2qkCXiexxe/+EUcPnwYR44cQVNTU8Kf2b17N15++WXccsstwmMvvvgidu/enfH1KEHFwCIj3gyBZDoEyBdNDTGQTs0A8QDv7u6GyWTCtm3bBKe+TBAPPEr3ZkJE1smTJ2EwGLBlyxZJ+1gyLDQxkAziyYBiwx2/3y/ZgZLRwfJCt6KiorzcwBdjzUA2zqlUQyKPABFHUSLw5LbL8s8v35GBXKPUxcDzvGppgi984Qt48skn8bvf/Q7FxcVC3r+kpERwTf34xz+Ompoa3HvvvQCAm2++GZdddhm+//3v44Mf/CCeeuopvP322/jJT36S8fUoQcXAIoFEAliWBXAhHUCq6AcGBtDT05OwQ4DcPNXK9adynKmpKVitVrAsi3Xr1mHFihVgGAbDw8MZX0+mYoBMO+Q4DrW1tWhpaUlroVlIYiCThVKcxxbPoidpHZfLhenpaTgcDoTDYaGjQqvVwul0ori4OOt2y/kaGpSPc6YzdEspAkQEnsfjwdTUlPD5EbtsIg7I9L58vNZ8GR0RDwkxHo9HFTHw0EMPAQAOHDggefw///M/8YlPfALAvKGVWHzt2bMHTz75JL75zW/iG9/4BlavXo3f/va3WfEYAKgYWPAQxTowMCB8UYkIIB0CNpsNWq0WbW1tCTsEyKhOtWyEk1nExbULq1atQkNDg+SXXk2PgFSPI06pNDY2wuv1ZtRlsdB2/mpei9i9jRSg8jwvjA4eGBiA3+8XTFqybbdMrimXLGYBEkvgiUc/z87OClMAAeC9996TRBGSNbtKF7WsiFNFqYuB4zjVxEAy38MjR45EPXbttdfi2muvzfj8yUDFwAJF3CbI8zwGBwdRX18v/GKKOwQSzRCQo2YXQDgcjvnvwWAQdrsdw8PDcd0N8+EeGIlE0NfXh97eXklKZWRkJKMFdCFFBnIBwzCSQreCggKsW7dOssBky255ofsMqEU2zX/En5+4VXZ6ehrnzp1DSUkJ3G43xsfH4fP5osyuioqKMipUlJOvyADLskIrNoEU1qpZQLiQoWJggRGrQ4Ds5sW77ObmZjQ0NKT85VFLDMQ6jnihLS8vjzLmUToOSX+kizhlEg+e5zE2Ngar1QqDwYBt27ZJirEy9StYamJAjPh1xbNbFuex/X5/VKsc8fRP5nxLoWYgH06ADMNAr9ejvr5eeExudtXf3y8UKspnMqTbqppP90F5FwMZLEYHFVFyCileC4fDim2CADA4OIiOjo6UZwjIydZMAZ7nMTIygu7ubhgMBmzdujWuw1as46h1PXJmZ2fR1dUFv9+PNWvWYOXKlYoOgZlcC1nsYy34i6VmIBvEs1smf8gO1GAwKAoE8Wu6WHwGkjnnQhAgsQoVxWOCxa2q4kJTUr+QaKHPlxiI1UlQUFCQt+6GXEPFwAJAqUOA3HBIh8DMzAwKCwvTmiEgR00bYXKc6elpYerXmjVrUF1dnfRNU00xoLTQBgIB2Gw2jI+Po7GxEWjeJm8AACAASURBVE1NTTELsjJdrBO95ny3Fi40lOyWWZaV7EDFQ3/kdsu5Jl8FhPkQA8ksgrHGBMs7UXp7e4VCU3kng7iOJN+RATGkrXChiepsQcVAHiGRALKgxusQqKysRGFhYcZCAFDPRlir1SIcDuPkyZMZpS3UNAwSH0c86KiyshL79u0T2njiXYsaYiBeZOBiRo3Xp9PpUFpaKplHEWseA8/zOHXqlGpmO4lYzAWEqZCJFXGsQkXiqOjxeDA7O4vBwUEEg0FJHYnH40kqRaQ22fQYWCxQMZAH5IOExCIgVoeA1WpVZTcPqJMmCIVCGBkZwdzcHOrr6zNKW6idJiDpCpvNBpPJlNSgI4IaaQIg/qJxsaYJsvm6lELUo6OjGBgYQGVlpWC2Q6YCineeFotFtXkMCyVkv9jOyTAMTCYTTCaTxAo9FApJRN7s7CwikQimpqai6hCyOZWTRgaoGMgp8QYJARdC7cFgMKpDQKvVIhgMqnIdmYiBSCSC/v5+9Pb2CpGKSy65JKPrUVMMEL+AYDCItWvXppSuIMdQKzKgdF6aJlAPhmGg0+lQU1MjPEbMdlwul5DDtlqtAKCK3TJNE6iLwWCQ1JGcPXsWhYWFWLZsmSASxFM55Y6Kas3UUDJhc7lcS6Z4EKBiICckGiSUTIeAGhX34mOlKgbEEQuDwYDNmzeD53l0dHRkfD1qiAG/349gMAibzYZVq1ahsbExrZuZWpEBsmj4/X7JrvRi7iZYCMSaCqhktywvciOLTLzFZakUEOZjYiE5r16vj0oTiQsVlWZqiIVePMvsWCiNL6ZpAopqJBokFG+GgBydTqdamiDVAsKZmRlYrVYEAgFJFb7T6cxJF0A8WJZFb28v+vr6oNFo0NramnAASDwyXazJDdTpdKK7uxsejwdarVZS9BYIBHKyqFzs4c1k30M17ZZpmiC7xCogjFWoSESex+ORfIZyR8VEjphKkQGPx0PFACVzOI6Dy+UCz/MwGo2KHQL9/f1CYVuiwkC12gFTOZbX64XNZsPU1BSam5ujdtu5aglUQjzjoKCgADt37kRHR4cqMw4yEQN+vx8A8O6776K5uRkrVqxAIBAQFp1gMCh89uIFx2KxZKXwLddRiFwKkEwEVTy7ZfJZEbtelmWFxSUUCsHr9aK0tDTrdsuEizlNkMl5xSKPIC5UdLvdcDqdGBgYEBwx5akisvliWTaqcJGmCSgZIW4T7O7uhtlsxurVq4V/S3aGgBy1xUC8tqxQKISenh4MDg6ipqYGl156qWKFb7b8ChIxMzODrq4uhMNhtLa2oqqqSqi/UMPJMJ1jkM4Fh8MBANi+fTssFgvC4bBwAwIAn8+HyspKWCwW4YY1ODgoKXyzWCw5qYxXm3ykP9R8b8R2y5WVlQCiFxeWZdHf34+enh7J7pP8yYZAyFc3Qb5a/DIRPvEKFUkEQWx4Rfws/H4/LBYL/H6/UKjodrslrowXO1QMqIRShwAJ7RPXu1RmCMhRWwwQ73ExHMcJN7ply5Zh9+7dccNkakYGknltPp8PVqsVU1NTwowD8Q1LjXx8qscQOxoajUbs2LEDb7zxhrDjkO9eyf/LQ57ynCgZQ0uKptIRCItFRKRLLsSHfHEZGxtDa2srCgoKJBXwpE0uG/MY8hUZUHuORDJkS4QoOWKK/Sz6+/vhdDoxPj6Ohx56COPj48Jn3NHRgbVr16Z9XUePHsV9992HkydPYnR0FIcPH8ZVV10V8/lHjhzB+973vqjHR0dHhTRXNqBiIEPidQjodDq4XC6cOHECoVAILS0tKc0QEJPNAkKxWNHpdGhvb09KEZOQeqY3q0SigmVZ9PT0oL+/HytXrowZqVBr4FGyiwzpXPD5fFGOhqk6ECrlRMUCweVySQSCfMFZTBEEtchnMZ+Sn3+25jHkq05hoZj/ZAuxn8XExARqamoEP5cTJ07g8OHDOHnyJLZt2wYAaGtrw1e/+lV8+MMfTuk8Xq8XmzZtwo033oirr7466Z+zWq2SNAWJVmULKgbSJJkOAWKtunr16rTMeMSoGRkQ78SdTie6urrSHngEZL5ziWWCxPM8hoaG0N3djaKiIuzatStuDi9XaYJgMIju7m6MjIygsbERW7dulYSH4wmKVCIPYoGwcuVKABcEgsvlioogyBeceLbI2WKx1Axk45zx5jGQsc9jY2Pw+XzCPAZx1EdpIiC5zywm06FMz5tPO2KNRoMdO3Zgx44deOGFF3DnnXfihhtugM1mw6lTp9DY2Jjysa+88kpceeWVKf9cZWVl0v4oakDFQIqk0iFQWloKk8mE5ubmjM+rZjeBVqtFKBTC6dOnMTk5iaamJjQ2NqY1Mx1QrsRN9TjyBXh6ehpdXV2IRCJYv349Kisrk7L6zWZkgNR82O12LF++PGbhZ7wFP9OberwIglwgkM/HbrcLC042jVvywUJ3A4w3j4GEqCcnJ+H1eqMmAoojCEuhm4DcWxdKRIKML9ZqtWhtbUVra2tOr6m9vR3BYBAbNmzAt7/9bezduzer56NiIAUSzRDo7e1Ff38/qqqqsG/fPjidTgwNDalybrJ7znQ3FA6HMTY2JlTK7t+/HyaTKa1jkZuFWgswaRWyWq2YmZkR6gKSvSll2gkAxBYUk5OT6OrqAsMwCdMoRAzkynQolkAYGhrC4OCgUPQmjyCoLRByvVNfrCOMleYxxLJbJgtUf38/SkpKcpYSyseiTDY7C2FQEc/zcLvdeRlfXF1djYcffhjbtm1DMBjEo48+igMHDuCNN97Ali1bsnZeKgaSQEkEiBdCcYfAzp07hV8gt9ut6m4eSH8XLr5OUjG9YcOGjK6J1Edk+hrJe9nZ2YmhoSGhgyFVe2O10gTiRcbr9aKrqwtOpxOrV69GXV1dQnEiPobSTTsXi5hGo0FBQQF0Oh3WrVsHYP53INaCI+9iWAwRhIvJAEjJbjkSiWB2dhZnzpxBJBKJKioVRxDUslsWnzsfRkdAfsRALDvifLQWrl27FmvXrhX+vmfPHvT09OD+++/HE088kbXzUjEQB3GHALnxyGcIdHd3x+wQULvoD1AeqJHoNYyPj8Nms0Gj0aCtrQ1arRbvvfeeateVyQLMcRyGh4cBzIflEnUwxEPNAkJx0WKq4iRRmiBfDoQajQYWi0VygxMLBJfLtagEwkKrGVAbsugDwLp164SolbjrZGhoCB6PBwzDKAqEdBf0fKQJIpGIsMHIJSTiqjSoaKH4DOzYsQPHjx/P6jmoGFBAqUNAXBcgHtcbr0NAbddAhmFSOt7s7CysViu8Xq9QHEj8+9W8rnQX4MnJSVitVuHn29ra0k5ZAOottC6XC0ePHkVhYWHCosVUryOXYiCZRUssEIjHfyQSkXQxEIEgHyGsJBAWklhQG5LKyuVrFN9/gNgpIbHdstyqN515DPko5Mtn8SAgjUiEQiEEg8EFIwZOnz6N6urqrJ6DigERYhEQq0PAarVidnY2qXG9Op1OtcgAOV6y/fg2mw2Tk5Mxq93zOQHR4/Ggq6sLc3NzWLVqFerq6vDiiy9mvEhmGhlwOp0YHR0Fy7LYuHGjYGaUKgtFDADppSS0Wm1MgUCKFJUEgt/vh9FozNmCma8ahVzuXJMpWBTPYyALRqx5DBzHKQoE+X1sKbkeKkUk3G43AKgiBjweD+x2u/B3h8OB06dPY/ny5aivr8fXv/51DA8P4+c//zkA4IEHHkBTUxPWr1+PQCCARx99FK+88gr+/Oc/Z3wt8aBiANIOgTNnzqC2thbLly8XvoR+vx92u12YIdDW1pZUyJgslGrdtBItvOIixurq6pjFgWoVIwKpLcChUAh2ux1DQ0NR76NaIf54zoqxCAQCsNlsGB8fR0lJCUwmU0bmHtnsJsgXYoFAkBe9zc3NgWVZTE5ORhUpGo3GrFgt50MM5DoykM6inOk8hqUWGdBqtZLP1eVyQavVJrSJT4a3335bYiJ06623AgBuuOEGPP7448IobkIoFMJtt92G4eFhFBQUoK2tDS+99JKiEZGaUDGA+V8GsoP3+XwIhUJgGEaxQyCVXw6yG8+09Y4QqwaB4zgMDg7CbrejuLg4YWhbq9WqFvJMJsogLl4sLS3Fnj17JFPlyHHULv5LRCQSQV9fH3p7e4UZESTEmq3rWGhpgkyQF72RKFpVVZWw4DgcjqgIgloCIR8he2BxiAEl4s1jID4I09PTcDgciEQieO+99yQ1I9myWybk09tAqV6guLhYles5cOBA3O/8448/Lvn7HXfcgTvuuCPj86YKFQPnIXk5nU6HUCiEvr4+xQ6BVEi36C/e8eTOgRMTE7BarWAYBhs3bkRFRUXCm5W4MyHTX/Z4BYQ8zwt1AQzDoK2tTeIXLkatyEAyxyDvW1dXF/R6PbZt2ya0eanVnhjvGBfzCGONRqNYFS8uUuzt7YXP5xMEgnjBSVUgxHquw+lAY2mjqgv3YooMJIt4HgP5bnIchyNHjqChoQHBYDDrdsuEfEcGxLhcriU1sRCgYgDAhUWEVJHb7XYYjca0ZgjIj5ut/DyxwvV6vWhpaUFtbW3SNw2xGMj0ixzr9bndbnR1dcHlcmH16tUJry9XYoBcl9vtFq5LXgCXTTGwGGoGMkHpuxKrbU4sEMTGO/LdaCyBEOu1dUx1YNfPd2GZaRn+fN2fsbZsreLzUiUfYiAfVsTkdVZUVEjuD9myWybkczhSrMjAYk3rpQMVA+chHQJerxfLly/Hli1bVMvzq1VEqNPpEAgE8O6772JsbEyxODAZ1PIHAKIjA6FQCN3d3RgeHkZ9fT3a29uTEhxq+RXEEgPieoV416WGi+FCEgMLlXgCgRQpxhIIFosFBoNBMU0w7h3H5b+6HADgDDjhDXlVu+Z8RQby4bIIRBdKxrNbJn/INEBitywXdfFYSJEBj8dDIwNLkaGhIZw9exbNzc3w+/2SDoJMUaujgGVZ+Hw+TE1NCcWBZrM57eNl6g9AIAuweOLh8uXLsXfvXsmc8WSPkwlKCy1x4uvu7kZJSYlivYL8OtSMDMivKdc1A4spCpGKQDAYDNBoNDAYDJicnITFYkEQQXzg1x+AJzxf87Gjege2VKvn2CZv88sF+er3B5Lrmohnt0z+kBktZFxwrKjPQooMEIfWpQQVA5i3f1y+fDkMBgO6u7sVx/umS6ZeA2QxI60pNTU1GTsHAuq1FxLfguPHj0Or1WLz5s2SnUOyqCFO5IJienoanZ2d4Dgu6XoKGhlYWMQSCG63Gz09PUKR76x7Fvf03YNuV7fwvO9d+j1VryUfJkf5avHLZEOkZLcsHhdMRJ24bqS4uFgwu8r1+6wUGSBpgqUEFQOY/+UlN2i1vQHSTROIi+94nsf69esxNTWlmnJWYwoiqT4Oh8NobW2Nyr+ngpo1A2S+wdTUFFpaWvIy32CpFhDmAq1Wi9LSUhQVFUGr1aJ5VTNufP5GnHGdEZ6zybIJs9ZZHHccV+xiSId8jRLOR2RA7XOKxwWLzyNvTQ2Hw5iens7piO6FZEWcT6gYkJEvoyAxLpcLVqsVLpcLLS0tgh/+7OysqvbG6YoB8QjfoqIiVFZWoq6uLqPrUUMMEKOV48ePo7q6GpdeemnKN341IwM8z2Nubg4Gg0Fw6ruYWgvzfU7yPn7jL9/Ac7bnJP9298G7sW/lPkmR4sTEhBCuVipSTOZ8F8sshHjkSoDIoz4dHR0wmUwoLy8XpjoODAzA6/WCYRjhsyJjn9Wax8CybNTn73a746YTL0aoGID0BqbX6/MWGRCPP25oaIgqctPpdAgGg6pdV6piIBKJCHUB5eXl2LdvH4aGhtIy+pGTiRggcyK6urrAcVzaraCAet0EPp8Pb775JtxuNziOg06ng8ViEd7zYDCY9g41FRZTzUA6PNHzBH587seSxzZWbMRldZeBYZio3ag4XO1yuST57EQCIV/FfPk4Zz5y9+LviXx+hs/ng8vlgsfjwcjICKxWKwCkbbcsJtb44oaGhsxf1CKCigEZalb/A8lFGliWhcPhQF9fHyoqKmKaG6kR2k/nWGTYkdVqhV6vx9atW4WCITVrD9IRA3Nzc+js7ITf70dNTQ0mJyczGjuaaZogFArB6/ViZmYGjY2NaGtrAwDBypdUW7/22mtCxTVZhCwWi2o928DidTtMlj8O/RH3n7s/6vGbt90c87UrhauJQCBFikQgyCvil0rNQD7Nf5REiNhumRDLbpnn+Sg3xaKiorivJ1ZrIU0TLEHEX/Bcpgl4nhcq3QsKCrB9+3bJTUqOmmIg2cWX+Bn4fD5h2JF8MqOaXQnJIk5VNDY2orm5GXNzc5iYmMjoOtKNDJDP0mazAQCam5vR0tKCcDgMnueFcCjx+F+7dq2kZ5uIBJPJJBEH2XZ9W6y83Pcy7n7vbgCAUWtEMDIfMastrsWH13w4pWPFEghKFfEA8O6770a1OWaLfBYQ5ppUREimdsuk3gSIXUBIxcASJxsFhKFQKOpx8cS+Sy65JKmhOGqPRI4nLMR+/Q0NDTH9DHIdGRC3MJaVlUmiKGq1J6Z6jNnZWXR0dCAcDmPjxo0YHByMucMnkQelimvSs+1yueByuTA0NIRgMIiCgoIop75kw7gXY7HiO2Pv4P/89/9BhI+g2lyNUf+oIAg+v+Xz0Gszj64ofT4TExPo7u5GaWlpzAgC+YzUEghLbWBQJueNZ7dMBMLU1BQcDgdYlhW+V36/H8FgUOIU63a7M4owLkaoGDgP2RGSnbxaIUGdTge/3y/8XezMt2rVKtTX1yf9ZVdzJHIsMRCJROBwOOBwOISURTw/g1xGBiYnJ9HV1QWGYRRbGNXI96eSJggGg7DZbBgbG0NTUxOampqg1WoxPDwsOYb8dynW8ZV6tkOhkBC+npmZQX9/P0KhkLDTIfnVRKHQXJHtMHqPswfXHL4G3rAXq4tXo9vdDQYMgpEgLAYLPr7h41k7t0ajgU6nQ319vfCYPIIwNjYWZbqTiUDIRwHhQksTZILYbrmyshLA/HsaDAaFz4xlWWGD8b3vfQ9FRUVgWXa+ZXV2Nm60NhFHjx7Ffffdh5MnT2J0dBSHDx/GVVddFfdnjhw5gltvvRXnzp1DXV0dvvnNb+ITn/hE2teQLFQMyCA7OpZlVcnfkt18IBCA3W7HyMhISs588mNlSwyQIjybzQaj0Sjx64+HGrtxcpxYr83r9aKrqwuzs7OS7opsXEsykQEyeMlutwvRCbFgircgpipYDAYDysvLUV5eDkB6I3O5XJiamkJvby8ikYhQTEUWn1xHBbJ9vgnvBK5+7mpM+aewoWIDxl3jAIDqomqMeEZwY9uNsBizF9pV2iDE6qkXp4DEAkFepJhIIOSrgPBiEQNKMAwDk8kEk8mEiooKDA8Po729HQaDAZ/5zGfw5ptvoqOjAw8++CDuvPNOrFq1Clu2bME///M/Y926dSmdy+v1YtOmTbjxxhtx9dVXJ3y+w+HABz/4QXz2s5/FL3/5S7z88sv49Kc/jerqalxxxRXpvuSkoGLgPOQmLc4jqSEGNBoNPB4Pjh07Frc4MBmyJQZmZ2fR2dmJQCCAtWvXorq6OukbkFrXpCQGwuEwenp6MDAwgNraWmzcuDHuzVMtr4J4ixoxMuJ5Hu3t7cIiLSaeoMg0eiG/kQEXQqEkgiCeXQ8ANptNEAlqtWPlGnfIjWt/ey0ccw40ljSivbIdv5j8BSpNlRjxjECn0eGzmz+b1WtIdpeejEAQ2/bGEwgcx6laVJoM+XQCzKcdsdFoxNVXX40Pf/jD+MUvfoEjR46gtrYWp06dwjvvvJNWq+GVV16JK6+8MunnP/zww2hqasL3v/99AEBrayuOHz+O+++/n4qBXMMwjCq5eZ7nMTw8DJvNBo7jkt5px0PtAkK/348zZ85gYmICTU1NaGxsTLlYTc3IAGlRFL93RUVF2L17d1JuYNkcMuT3+2G1WjE5OZnQyCiRA6HaiEOh4lzp5OQkOjs7AUBox2IYRujTJgIhm4YuahCKhPCx//4YTo2fQpm5DIf2HcKNz98IAKgvrsdEYALXrrsWK4tXZvU6Mtmlx6sRkfv6iwf/+P3+nBeQXuyRATFkQJ34PeZ5XiggrKiowMGDB3Hw4MGcXM+JEydw+eWXSx674oorcMstt2T93FQMKJBpEeHU1BSsVitYlkVdXR1GR0czFgLABTGQaT0Dy7JwOp1wOp3CnAOTyZTWsdQsIIxEInA6nejs7EQoFEq6sFJ8DPLlTvf9ke/qOY6Dw+FAb28vqqqqknqvEkUXchG+JwJBo9FgzZo1AKT92m63G4ODg/B4PNBqtVH5bWKSlG84nsPn/+fzeKX/FRToCvCrv/8VvvjiF8GDx4GKAzg6eRQA8KWtX8r6tajdWqhUIyIXCC6XC06nExMTE5LogdptqGLyVbQojszmCnKfF5/X4/EIHUC5ZmxsTBD0hKqqKrhcLvj9/ozm0SSCioHzqNFe6Ha7YbPZ4HQ6sWrVKjQ0NAijPtWA2CanW+3L8zxGRkZgs9mg0WhQWloq9MGni1oFhEQITExMoLm5GY2NjSm/RnIDy1QMkMV6YmICXV1d0Gq1KUd2FuJsAqV+bY7jJCY8fX198Hq9gvmLePFJxiRJbQFx6Ngh/Lrr19BpdHji757AK/2vwDpjRUVBBYr1xeDA4f0N78f6ivWqnleJXPgMyAXCe++9J7z/RCCMjIxEjQ4mn5UaAiEf3QRkQ5GP85IprgS32w0AtLWQkroYCAaDsNvtGB4eRl1dnSS3rXY7IJBeOE284163bh1YlsXY2Jgq15RJZCASiaCvrw8OhwMGgyHjKAWQ2c6GRBdOnjyJ2dlZrF69GnV1dSktAvEiAwttkqBGoxE6EmpqagDEnxQo90AQ57fVfl0PnnwQP3j7B/P/f/BB1BbX4h9+9w8AgEN7D+H2l28HAHxpW/ajAkD+rIF1Ol3CCIKaAkHJhCfbkA1FPiIDWq1W8v12u90wm8158fdYsWIFxsfHJY+Nj48L6bxsQsWAAsmKAbKQ9fb2ory8XHFsr5qtiuRGlMri6/P5YLPZMDk5Kdlxj46O5tU5UO5q2NjYCJfLlbYQAC7sStNdlFiWRV9fHwDAaDRi//79abWDkQVfadztYphaqDQpMFaFPFl8LBYLQqFQRp+fmLngHB546wEAwF377sJ1667DwacPIsyFcWXzlRjzjiHABdBa2ooD9QdUOWciFlJlf7wUAxFxYoEgL1KMJxDy6XqY6/c31pCi4uLivKTJdu/ejT/+8Y+Sx1588UXs3r076+emYuA8qaQJSLi9u7sbRqNRYs8rR7ybz1RpkuLGZBZx0ifb19enWBegtj9AKmLH7Xajs7MTHo8Ha9asQU1NDUZHRzE7O5vxtQBI+XURYdLV1SUs/pdccklGN8SFEBlQ82aWjEnS3NyckOqRRxBS3fGVGEvwP9f9Dw7bDuOW7bfgkdOP4K3Rt1BsKMa9l92Lg0/PF3TduO7GnN20F7odcSKBQFKWiQRCvtIE+eokULIiVmt8scfjEcbPA/Otg6dPn8by5ctRX1+Pr3/96xgeHsbPf/5zAMBnP/tZPPjgg7jjjjtw44034pVXXsGvf/1rPP/886pcTzyoGFAgnhiYnp6G1WpFKBTCmjVrErbhkV80pV+6dEgkBsSV+IWFhTGH9qhV+Ee+wMncQEKhEOx2O4aGhlBfX4/NmzcLNyC1PALItSSLWJisXbsW5eXlePXVVzNONcR6b/Mx9S5byBefc+fOwWQyobS0FC6XC7OzsxgYGIgySZLbwcZi1bJVuH3n7Rh0DeKu43cBAO7afxeODx3HhG8CFcYKXNmQfNtWpmQ7TfDOOwz8fgZ790oLWDM5ZyyBQKIHYoFgNptRXFwMj8cDo9GIcDics7bGhWR0pGZk4O2338b73vc+4e+33norAOCGG27A448/jtHRUQwMDAj/3tTUhOeffx5f/vKX8YMf/AC1tbV49NFHs95WCFAxoIiSGPB4PLBarXA6nWhubkZDQ0NSSlaj0ai28ALxaxCmp6fR1dUFlmUTVuKr6Q8AxFf2HMdhcHAQdrsdJSUl2LNnT1TPrlpiINmddzgcht1ux+DgoESYkPc2Uy+AfHcT5APSolVWViZxhwwGg8LiI7aDLSwslEQQlCbO8TyPL7/8ZXjDXuxauQuf2PgJ7Pr5LgDANTXXwKDN3lwAOdlIE4yNMXj2WR0eesiAgQENCgp4jI56QE6TDQGi1+ujPqNQKCSkgZxOJ8bHxzE0NCQIhGRTDOmykCIDLpdLteLBAwcOxP2+P/7444o/c+rUKVXOnwpUDJxHniYIBAIApLvZZIxvlFCziFDJktjn88FqtWJqakroYkj0xVJLDIgjA0oQkx6O49DW1iYY5chR068g3nHEkZPi4uIoYZJp3QE5Bvn5fNYMLITWQGC+/qKioiLKJInsTCcmJmC328HzfJSL4guDL+DPjj/DoDXgwYMP4sW+F2GbscFisOCD1R/M6etQK00wPQ3893/r8cwzOhw7pgXPXzimzwecOcOgvX3+dyRXdQoGg0EQCJOTk2hoaBBmMJDPiczKIAJBnGbINOq5kIyO3G53WgZDix0qBhTQ6XQIh8Po7e1Fb28vli9frribTeV42XAOFDv0rVy5EpdeemlS7V/y42QC2Y3LF2AiUKanpwWBEm+HkwsxMDc3h46ODgSDwZiRk3RSDXLEC7584V9o3QT5IJZfvN/vlxS/DTuH8eWOLwMAPtXyKVhCFjzwxnxR4SfbPokCrUpuijwP7euvw/ilLyH4z/+MSAzHuEzEgNsN/PGPOjzzjB4vv6wFy0Yfp6CAxx/+4BOEAJDfqYVigUAQRxDm5uYwODioikBYSJEBj8ez5NoKASoGBMQ7Qo/Hg6mpKQQCAcWBOKmidnshy7KCN35RURF27dqV8i8vKSBUq8uBCAulwsVk0QVsWgAAIABJREFUBEo2xUAoFILNZsPIyIgwUCjWjUrtyEAq/3YxkIm/A5k4R0bSPvLCI3CxLqwpWYOPNX8ML3W+hBOjJ6BltNin3ydYMFsslvRMktxu6H/9a+gffRTac+cAAObrr4f3rbfAr14d9fRUQ/aBAPDiizo884wOf/qTDn7/hetjGP58RIAHwKCxkcPvf+9DY6P0d2OhTS2MJxBInYhYIMiLFGN97xZSZEDNNMFigooBETMzM7BarcJY0t27d6s2uVAtMRCJRGC326HVarFhwwZUVFSkdY3iyvtMv4QkykAsb81mc8zCxXjXo4YYkO/KBwcHhbGzycyFiBXpSPcalP4tVyyUNEE6vNT3Ep7qfAoMGDz0gYewoXoD6pvrMV00jZG5EWyo34Cenh5MTk5iaGgIOp1OsjONZ5Kk6eyE/tFHoX/qKTDnDWYIfGkp+KYmxZ9LRjiHw8CRI1o8+6wef/iDDi7XhedXVnLwehl4vQx4noFGw4PjGGzZEsEzz/hRXh79O5PPNr9kSUUgkLHBcoGQz8iA/PfE7XZnvAFcjFAxcJ5AIIBTp06hsbERRUVF6O7uVu1mqkaagBQwzs3NoaysDFu2bMnoJpGJgZESZ8+eRTgcTnnQEUHtyIDT6URHRwcikUjcWgUl1BgmtFQLCNXAE/Lglpfmvdg/t+Vz2F69HQBgMVpw8/abhecNDw+jubkZy5Ytk7goKpokmUwoO3YM5scfh+748QvXrNOBYdnz+3Mg8NOfAjF2r7GEM8cBJ05o8cwzOvz2tzpMT1/4XtbUcNi1K4L33tPAZpv/2fJyDjMzDDiOwd/8DYv/+i8/YmUg82V0lOk5YwkEkgaSCwTiAuh0OlWpQUiWWDUDTTEE4cUMFQPnMZvNOHDgALRaLZxOpzA0Rw0ySROIq95ra2tRXV0Nk8mU8Zc1HQMjOcFgEDabDaFQCGVlZVi/fn3aX2I1Oy56enowNzeH5uZmNDU1pfxeJZotkAgiBkjKhGVZlJSUCKHHpV4zkIh7/noPBlwDqLfU45t7vhnzeeS1xTJJ8ng88NlsKPzZz1Dxu9/BODMz/3MaDXwbN8JstUITCIAvKADj84G9/HJE/uZv4p7vQhoJOHVKg2ee0eO553QYGbnwO1ZezuGqq1js38/i8GE9nn12vvq+uJjHzp0sXnpp/u//+I9h/OhHAcQrzs+X0VE2dunycdwAhHHcfX19CIVCOHfuHEKhUMwIgtoo+b94PB5aQLjUIV8ANcP65HipLnTidjyLxSJM7uvq6lKt8C/dIkKO49Df3w+73Y7y8nIUFhaiuro6oy9rplbC5JpIimffvn1p23dmmiYA5qccHjt2DGazGSaTCX19ffB4PNDpdMLwI2IDnOsRtQuZt0bfwkPvPAQAeODyB1BkiH1Tjhm25zgYjx1D0U9/Ct0f/wjm/GfJVVXB9ZGPIBgOo/InPwHDcZhtbERpXx94rRZ9X/wiDHF2pjzPw+Ew48knDXj2WT16ey/8nlosPP7u71hcc00YW7dG8MMfGvCZz5gRDM6nAz7+8TAiEeCJJ+Y7kW69NYhDh0KIt87zPJ/zyACZfZKrcxqNRhiNRkxPT0On02HVqlWCQCARBOJVQQSC2KsiU4FA7IjFkImFSw0qBkSQHZ2aFsJA6pGByclJdHV1AQDa2tpQXl4uXIdWq0UwGMz4msixUhUDZHiPRqPBli1bUFZWhtdffz1jgZKJGJiamkJnZycYhkFhYSEaGhoy8vHOJDLg8XgwODgIn8+HjRs3oqKiQsjBRiIRjI2NwW63w+fzSSx9iTBI17FPiXzUDGRyzlAkhC/+eX4i4T+0/gMub7w84c9Izud0Qv/LX8Lws59B09MjPMzu34/wpz4F9uBBFHzjGyg939sd+tjHUHTyJABg+pprMF5WBtf5nanYJMnpLMWf/lSKX/1qPez2C3bjZjOPK69kcc01LC6/nIXBAPzqVzps316I8fH53+FLL2Vx111BPPCAAb/7nR4Mw+Nf/zWIz30uceSRCNJcioF8nBOY36GTlm0iEJQiCG63GzMzM+jv71dFIMSKDFAxQAFwwTVQrYEdpFUxER6PB11dXZibm0NLSwvq6uqivpRqdiakkqcXX9vq1atRW1srXJsaIf5EfgVKiNsXW1paUF9fj7feeksV86JUxQDLsujp6UF/fz9KS0thNBqxcuVKyWdFRgVrNBqsXz8/ZY+4wSk59okFgpIhTzIspjTBA289gI7pDpSZy3DvgXsTPp+8Ns2pU/MFgc88A8bvn/+34mKEr78e4U99ClxrKzAzA/N110F37Bh4hkHwO98BiotheOIJ8CUlMP3rv6LtfH57fvCYF88+q8Pzzxejo+PCwqDTcdi3z4drrgnjqqs0sFjmP5MTJ7T42teMOHVq/ve4qYnDd74TxN69LD76UTOOH9fBYODxk58EcPXVyX1/8ykGFpodcTyB4HK5ogSCvIsh1rHlkQGe5+F2u/MyvjjfUDEgQhwZANSzENbpdPCfv0kpITY2qqurQ1tbW0xjI7X8AZI9ltjLoLa2VvHa1JhzkMpcgUgkAofDAYfDgRUrVkjaF9VyMkz2GOK5BiaTCbt27YLL5cLo6KhwLPmxxcjd4Hiel9zkJiYm0NPTA47jUFRUJKmWJ4VXC4VMhIdtxobvvfE9AMB3D3wXZeYE1dx+P6r//Ges+OpXYTx9Wng4smEDwp/+NMIf+QhIVR7T3Y2Ca6+FprcXfFER/I89hsjevSjcvBkAEPzqV8Gff/97exl86UulOHasTDAD0mh47N0bxo4dvThwYAYWy/zQpnfe4eDxlOE//3MdXnxx3su+uJjHHXcE8dnPhjE9zeADHyjAuXNaWCw8nnzSj0svTf67K4idHIoBcj/IR2QgVQGSikAgkR65QFDa8NE0AUWA5NPV9gaQw3Gc4BewbNmypIyNciUGeJ7H0NAQuru7UVRUJNQsKKGmlXAi90CSptDr9di+fTtKS0tVv5Zk0wRerxednZ1wuVzCwCWGYeB2u9PuJmAYBiaTCSaTSeLYRwx5iJe81WoFwzAScUDa6YhAWEhCIR4cz+GLL34RoUgIB5sO4tp118Z8LtPTA8Njj0H/i19go9MJAOANBrD/638hfNNNiOzcCXEiXvvqqzDfcAOY2Vlw9fXwP/00uPXrYbjrLmgmJsCtWoXwZz4jPL+yksdbb827Au7YEcH//t9hXH01i6oqHu++O43ly5ejtrYWbjePf/s3DX784wIEgxowDI+DBwfwj//Yhfp6I/7yl0p86UurMTKiRVUVh+ee82PjxtR+L8nvcS4/R1KwuBCmB6aDXCDwPC/pYpALhHA4jMnJSXAcB71eD7PZrOqgosUEFQMxSDa0n+yxxIsuz/NCXYBGo0F7e7tE3aZyrEyIJQacTic6OzsRDoexfv16VFZWxr05qDnnINZCLk5TrFmzBrW1tYrXpIapTyJREolE0NvbC4fDgdraWmzatElSBKi26ZCSIQ/HcfB6vYJAIAWK4nY6MqUyH9P2UuGxdx/DieETKNQX4v733x/7WoNBFL7vfWDOT7f0VVYifOON0N50E3iF1lH9z34G4+23g4lEENm5E/4nnwRfUQGmvx+GBx+cP+Q99wCiSFdREfCznwWwcWMEDQ3RBkA8z+DJJ3W46y4jRkfnd8/797O4994gNm5cBq+3DUePhvFP/7QSc3M61NR4cNddbyAc1sFut0g+m0SfST4W5nxMLASyZzrEMIyiHXYoFMLc3BzOnj2Lubk59PT04LrrrkNtbS1KS0tx+PBhuFwubNq0KaE3STz+4z/+A/fddx/GxsawadMm/OhHP8KOHTsUn/v444/jk5/8pOQxo9EoWONnGyoGRKQyxjgVxJEBt9uNrq4uuFyuqNx7ssfKlhjw+/2w2WyYmJhAc3MzGhsbkx7GlC33QHEuXmnhzca1xIsMTExMoLOzEwaDIaaxklhMkIpw8b+pkcfXaDRCuLOmpgbA/A1VPM+epCpOnDiRlQJFJVJduIbdwzh07BAA4NC+Q6iz1MV+stGI8PXXQ2O3I/TpT+MvBQVo27w5OqTLsjB+/eswPPIIACB83XUI/OhHwHlxZDx0CEwwCPayy8B+4ANRp/nQh5S/9+++W4yHH27A2bPzxamNjfN1AR/6EHs+GMHg2LESfPKTZvj9DLZti+DppzmYTK3CZ9LX1wev1yuYJImjOgaDQfL+LQbDITXPmysRQgQCiSq2tbWBYRi8/fbbePXVV3H33Xfj6NGj+OEPf4iZmRm0trbitddeSzl18PTTT+PWW2/Fww8/jJ07d+KBBx7AFVdcAavVKthwy7FYLLBarZJrzRVUDMRAzR04ERZnz57FyMgI6uvr0d7enlZLmdrpi0gkIsnBV1ZWYv/+/cKuMhnU8ggQL+Q8z2N0dBRWqxUFBQVJWy6rlbKQL9g+nw+dnZ2YnZ2NG5kgP5/KsdVCq9WitLRUuMkFg0G89tprWLt2bdYKFDOB53nc+vKtcIfc2F69HTdtuinhzwTvvRc4f538sWPRT5ibg/kTn4Du5Zfnn/+tbyF0221C6kD7+uvQP/fcfBHhv/yLJKUQi8FBBt/6lhHPPtsOYL4u4CtfCeFznwtBbF7385/rcfPNRkQiDA4enDcTKixkABRLws6RSEQS1ent7RVMksSV8cSIJ5fkQ4AA+bEjjkQiwnvMMAyam5vBMAxuu+02vPDCC9BoNBgaGsKZM2fSqiH493//d9x0003Cbv/hhx/G888/j8ceewxf+9rXFH+GYRgh+pdrqBiIgVqRAY7jMD4+Dp/Ph6KiIuzduxeFhYWJfzAGakYGGIbB7Ows+vr6YDAYsG3bNixbtixv10QWcpfLhc7OTvh8vpQdDdVOE4iFEpm1kGhq5UKxIyYsW7YsJwWKqb7vh22H8ULvC9Br9Hjwbx6EVpPEYiBaqOTpD8bhgPkjH4HWagVfUIDAT34C9u///sLPchyMX/0qACD88Y+D27gx7qm8XuD++w344Q8NCAQYMAyPa6914Tvf0aKq6sJr5XngvvsMuOeeeWXw0Y+G8cMfxjYT0mq1gggjEJMk8rmQewYAvPfeexKRkE1fiostTRAP0kkg/h0i9QJEINTV1aGuLk60KgahUAgnT57E17/+deExjUaDyy+/HCdOnIj5cx6PBw0NDeA4Dlu2bMG//Mu/CJ1H2YaKARFqpglIlbnVaoVGoxH68jNFrYWXzC1nWRatra1C8Vs6aDQahEKhjK+JYRg4HA5MT0+joaEBW7duTbmbQ83IwOTkJDo6OmIWK8b7+USFkPkiVoGiz+cTFiJ5gaLc718NQTPjn8FXXv0KAOC2Hbehtbw17dcDANrXXoPpox+FZmYG3MqV8D/1FLj2dslzdU8/De2pU+CLixG6886Yx+Q44Omndfj2ty/UBezdy+JjH3sHl19eJgnxRiLA7bcb8bOfzQvE228P4s4745sJKaHT6SRRHeCCf4bFYhEmOQYCgayMEL7wenKfJiBGRwuhndHlcqniPjg1NYVIJIKqqirJ41VVVYKHjJy1a9fiscceQ1tbG+bm5vBv//Zv2LNnD86dO4fa2tqMrykRVAzEIJMCQrKz9Xq9WL16NcrKynD06FFVCrmIg126xwqFQuju7sbw8DCKiopQVVWV8S9apq2FpHPB7/dDq9VmNC5aDTHA8zz6+voQCASwevVq1NXVpfReJ0oTkHNkO0qQSjSlsLAQhYWFKRUoZuKg+P+O/j9M+iaxdvla3LbjtpR/HrggqnS/+AVMN98MJhxGZPNm+J96Cnx1tfTJXi+M3/42ACB0223gY+Rs33hDg699zYSTJ+cXiYYGDvfcE8Tf/z2Lt95yg2EuFPoGAsCnP23C738/byb0ve8F8U//pJ6NOcMw0Ov1aGhoEB6LNwBI/LkUFRWltbjmI01A6mryIQZitRXmI4K3e/du7N69W/j7nj170NraikceeQR333131s9PxYCITCMDgUAA3d3dGB0dlexsya5ZDRMj8YChVI4ltjcuLS3F3r17MTw8rErHRCYL8OzsLDo6OhAOh2E2m9Hc3JyRMs+kfoHYBM/OzqK0tDSplIAS8SIDuRQDhHQiEckUKModFP1+P/x+f8KQ76v9r+KX534JBgwePPggjLrEI64VXxfLoviee2D+8Y8BAOEPfxiBhx4CFKq/DT/4ATSjo+AaGhD6/Oej/n1oiMGhQ0b85jfzwqaoiMftt4fw+c+HSN2hxBrY6QSuv96Mv/513kzo0UcDuOoq9SzMAeWFWWkAkLy3vq+vDyzLSlwUiTtfooU+X7l7IPdGR0pWxB6PR5W2wvLycmi1WoyPj0seHx8fT7omQK/XY/PmzbDb7RlfTzJQMRADnU6XtO1vJBJBX18fent7UVFRETUqV01HQ/LLm4oh0tTUFLq6usDzvGSCn1arVaVtJZ0FmAw5GhsbQ1NTE5qamvD222/nxT0QmH+POjo6oNVqsWzZMqxYsSItISC/hlimQ4vJGZAgL1AEpA6KTqcTIyMjGBwcjFmg6Av7cPNL85MHb2q/CTtX7kzvYjwebL/3XhS9+SaAeeOg0P9n783DHCvrfPFP9kptqeruWrr2tffqrbqru3pBf+IVdPQKchGUGWFwUFQEBXVAoYFGB3HBRuTKb3xE8A6MiqOMDjPMZdhGpbuhN+mqJFVJal+SWrLvOcm5f5Tv4c3JSXKSnCTV3fk8Tz/aTXLOyXbe7/v9fpZ77onjFBDIZmehfuyxlccdPcqpCoAVXsCxYyu8gEBghRfw138dwZEj4TheABBfwB09qsGbbypRXc3in/85gMOHpeHx0BC7SxfS1geDQc6+l/BCotGoIC+EPkexFAxAcYyO+PdQt9stSTGgVqvR39+PV155BVdddRWAlff2lVdewW233Sb6+s6fP48PCShe8oFSMZAESqUSPp8v5WNYloXVasXIyAj34a9ZsybhcYSMIpSdnSnIscQsvn6/H0ajEXa7Hd3d3Whvb4/7wUmlAshkTEAbLa1duxYHDx7kCiepZIGZHCMQCMBoNGJ5eZkbCfz5z3/O6TpSSRMLWQwUovNAOyi6XC4ulS4ZQfGpmacw4ZpAU2UTjhw8ktU5ZdPT0F5/ParOnwer0SD4v/83mGuTGxVpHngAskAAzOAgGO7GDDz/vBL336/hEgcPHGDw7W+HsHOn8GdPJwg+8EAIU1NyPPhgCNu25S6rTXa+bBZImUwGrVYLrVbL8Rto4yrS1TGZTGBZNk7iGAwGi2I4RO5rhUS+Q4ruvPNO3HjjjdizZw8GBgZw7Ngx+Hw+Tl3wqU99Cs3NzXj44RXr7aNHj2L//v3o6emB0+nEd7/7XUxOTuLv/u7vJLmedCgVAxQyGRO4XC4YDAYEAgFs2LABTU1NKb/MUvoWpJM9kujciYkJNDU1xdn10pDCRpgcR0xRsby8DIPBAJZlBY2WClkMxGIxTExMwGKxoKGhIe49kkKRkK4zcLEiFUHxzYk38dzYcwCATzd8GmdPnM2YoCh/6y1oP/lJyBcWEKypgf/ZZ6E6fDj540+dguqXvwTwF1miTIa33lrhBZw69S4v4KGHQvjoR4lfgDDoMYFOB/zLvyS3GJcCUo6ShIyryOdCCoSZmRl4PB4AwJkzZ+I+FzEmSdmiGKMJcl4hzoBU7oPXXXcdFhcXceTIEVitVuzcuRMvvfQSRyqcmpqKK/YcDgduueUWWK1W1NbWor+/H2+++Sa2bNkiyfWkQ6kYSIJkBMJgMIjR0VHYbDZ0dHSgs7NTVLu+EM6BLMtibm4Oo6Oj0Gq1SU1x0h0nU6RbgIPBIIxGIxYXF9HT05PQoaCvpxBjguXlZej1eshkMsFuTi6phWKfX8gxQbFHEjKZDOoyNR448wBiiOF/bfxfuOuDd2VMUFQ+/zzKPv95yEIhRLdtw3/fcQd27d2LlPTFaBTRjRsR270b0w39uP/vNPjVr1aeUVGxwgv4whfCEGOrUWgnx3y37Gni6Pq/EC5NJhOCwSDWrl0Lt9uNqakpeL1eTg5JcxCkUpYUqxhI1hmQ0or4tttuSzoWeP311+P+/oMf/AA/+MEPJDt3pigVA0nAX7z5xjyHDh3KKCY3H2ZBNFwuF/R6PUKhkGhtvpTFgNBxCCFvbGyM232nMjPKd2eALkp6e3vR1tYmeLPNJKhICPyCJE4LfwFzBsQg2Xfuh6d/iPOL51FbVotH/r9H0hIU3W73uwRFtRpbfv1rtD71FAAgcuWV8P/kJwicPp3e0nffPiz915t48lEGj+yu4HgBN9zA4MiREBobxX8O9JigECgWs1+r1aKpqQlNTU0A4k2SPB5PUpMk4qKYKYrZGeBfr8fjQVtbW8GvZTWgVAxQEBoTECe80dFRaDSarI158tUZIES8+fl5jognllgoVTEgtKNfXFyEwWCAQqEQ/Z7lqxiIxWKYnJyE2WwW5bCY65hAjOnQxcIZoJHsNZkcJnz7+LcBAN9+77dRV56YIwAkISi6XNDceisqXnwRADB2zTU4/8lPouIvWm2r1Yo1a9YIOiiyLOEFVGB2duW/DQ6u8AJ27cr8e3axdQaEINQ6FzJJIoUb3yRJo9EkdBDSSU+L2Rngb+i8Xu8lmVgIlIqBBNAxxpFIBCdOnEAoFMKGDRsycsLjQ+rOQDgcxvj4OMxmM9atW5egYBADKW2EyXFo295MNfr5iB+22+3Q6/VgWRa7d++Ok2Sluo6LoRggKGYXIsbGcMfLdyAUDeF97e/D9ZuvF/1c2fw8dJ/4BBRnzoBVqRB87DGsu+EGHAiF4HK5MDw8jKWlJUxOTiY4KFosa3H//Tq8/fbKLa6tLYajR0O4+urUvIBUuBSKAbHnFCrcGIaJk54SkyQiPU1mklTMzkA+CYQXGkrFgAACgQBMJhOi0SjWrVuHrq6unL+sUnUGWJZFNBqFyWSCWq0WvcAJQWoCoclkwvj4OEdazLRlKGXIUCgUwsjICGw2W0qeghCkHBMQm1mi8b7YxwR8PHP+Gfxx5o8oV5bjsfc/Jr4wPHcO2uuvh3xuDrE1axB89llEDx6EDEBZWRm3mGzfvh1KpZJzUDSbA7jnnmq8/PLKb0KrjeLmmxfwuc8FUF9fBUADILsFnSYQFgKFPh+Qmx2xUqlEbW1tXBeQSE89Hk+CSRLpHgQCgaLkIQjJsy/V+GKgVAzEgWVZbkEjTOjOzk5JqlYp1AQkxtfj8aCurg47d+7M6UckxZiAZVksLy8jFothaWkpLWkxFeRyec4mSDKZDIFAAH/4wx+wbt26jEOXyHXk8r6QYmJubg5GoxGRSCTO2hdYGe/kk6FNrqOYmPfO477/XrH9ve/QfWjXtad5xgqUv/sdyj7zGcj8fkQ3bkTgl78E29Ul+FgS8SuTVeDpp2tx7Jgafv/K6772Wj9uu20OZWV2WK0emM3ZOygSl7xCdwaKJfOTCrT0lIBvkuRwOBCLxfDWW2/FyRzFmCTlglJnIB6lYoCCTCaDUqnEwMAAqqurYbVaMzL3SYVcxgSRSARmsxnT09NoaWmBSqWSJGUu12LA6/VCr9dzcqSBgYGcCqdcOwMOhwOjo6MIhULo7+9PkC6KRa6dgUBgRXI2MjKCTZs2oba2ltN4u91uACvSLXph0ul0eQuhKWQXgl68vvLqV+AOu7G7YTdu3Xlr+iezLNSPPgrNgw8CAJjLL0fg6adXdHwJD2XJU/DrXytx5IgGMzMrv4f9+1d4Abt3xwA0/OVPCoIi1cZOFvGcTCqaTxTDr78Qowm+SZLFYkEgEEB9fT08Hg8WFxcxNjYmyiQpF/Dv7SzLwuPxZL2ZudBRKgZ46Orq4hYCKef82WQdEM9+k8mEqqoqDA4OoqqqCnq9XjLiHwkJyeQHRhcnra2t6OvrwxtvvJHzopPtjpx2M2xoaODMb7JFtgTCaDSKsbExjI+PAwAOHjzI2VFXVlaisrISTU1NsFqt2L17N5fQ6Ha7MT8/j2AwyHnMkz/53h1JCfo9+53pd/i9+fdQypX40QdEJBKGQii7/Xao/vmfAQDhz352xRcgSSG+0sWrwT/8QxXeemvlMa2tK7yAj31MmBeQzkExVcQz6S4V8rOIxWJ5TShMds5iFCAajQb19fUJJkmkeKNNknJN1yQQ6gxIZUd8IaJUDKSAlEZBCoWC2zGKgd1u51rMW7duRX19/bsJbRIVKXTOgZibHPExGBkZQWVlJVec0HG/uXRRMiXusSyL6elpjI6OYu3atTh06BD8fj+cTmfW15DNdQDgEg4Jj+PUqVNJ3wuSoV5dXR23MIXDYW5hWlpa4nZHdEu7uroaWq1W1M2vWGMCR9CBu15dCR/68t4vY1vdtpSPly0uouyGG6A8cQKsQoHQd7+LSArXtbk5GY4cqcCvfvUeAEB5OYs77wzji18MIwO1L4DENnayiGdSpFosFuh0upwWIbEolpqgGOfkFz20SRIx6eGbJNHpmvR4oaqqStRvhH+/KnUGSoiDlDHGNMQSCAOBAEZGRrC4uIiuri50dHQkVK+Z5CakAvnRC/0Y+SCOi8FgEFu2bEFDQwP3XpH/LaSVMAk4YhgGO3bs4DgewWBQckVCKhDvgqWlJWzYsAGtra1cByjZjDlZ50GtVnN2vuT59HhhZmYGXq+X0+iTRSlbfXe+cOS/j8Dms6G3thdf3ffVlI+V6/XQXncd5JOTYHU6BJ55BtH3vU/wsYEA8Pjjajz66Lu8gE98Ioz77w+jqUmaUUgyB0WXy4UzZ85AJpMVJOKZnHe1qgmkRDQaFcXrETJJisVicQUCbZLE90CgP5tYLJbQBfH5fIjFYqVioIRESN0ZSHUs2tQonUGPlGZB6RY+OvK4o6MDXV1dCTtestPN9ZrEHCMcDif4KtA/6FxlgWKPQTIWTCYT511A2xkDqYsBMRCykI3FYvB6vVyBsLCwAL8dXaH/AAAgAElEQVTfLzj3LoZy4YTtBJ4ZegYA8Pj/eBxlyuQ3ecV//ie0N98MmceDWFcXAr/6FWIbNiQ8jmWB3/xmhRcwPb2yUO3ZE8HHP/4mPvvZXQWJgiZ69N7eXq5ozWfEM1AcAmExxgS5SAvlcjk3giOgfyMejwcTExPw+XxQKpXcZ0Nk2PS9jHCfSgTCEgDktzMgdCyWZWGz2WA0GkWbGklVDKQ6FmnBm0wmLvK4oqIi5XHy2Rkg/InR0VHueoR8FfLhVcCH0+nE8PAwYrGYoLRTzCKc7QJNxgv0DYthmKRzb2DFmGft2rWoqKjI6+ISioZw5NRK+NCnd3waB1oOCD+QZaF64glo7r0XslgMzOHDCPz854CARPbMGTnuvluDEydWblUtLTE8+GAIf/VXHpw44Sx4DDQ5X0YOiiIIikK4lMYEUhYgQr+RaDQaV0STaOETJ06AZVn8x3/8Bzo6OqDT6SThaTzxxBP47ne/C6vVih07duDxxx/HwMBA0sc///zzuO+++zAxMYHe3l488sgjBUsrJCgVAymQ7zGB2+2GwWCAz+fDhg0b0NzcLOrmlu9iwOFwcCTFvr4+jtSTClJ0BpIVFMRqORwOp72eXJUA5BhCi3UkEsHo6Cjm5ubQ1dWFzs7OpHbGQPIFX4ogJBpKpRJr1qzhMhbI3NvtdmNoaAiLi4uYmJgAgAT+gZRt7acnnsakdxJNlU144NADwg8Kh6H5ylegfvrplb/eeCNC3/8+wBtzzM/LcPSoBs8+u3JjLi9n8eUvr/ACyssBv784Mr9U58yFoCikDlrNpkNSohCmQwqFAjqdjhsBeL1enD59Glu2bMHo6Cj0ej2ef/55uFwu9Pb2Ys+ePdizZw/27duHyy67LKNz/fKXv8Sdd96JJ598Evv27cOxY8dwxRVXYGRkRPDe9eabb+ITn/gEHn74YXz4wx/Gc889h6uuugpnzpzBtm2p+TZSolQMpEC+xgR06729vR39/f0ZEe/yVQzQIUzJ+AqpjiN1Z4B+nzo7O0WZP0lpXERAEyerq6uTdiUICl0MCB2/rKyMG1ts27YNGo0moa3t8/mgUqkSdq3Z7Iz+vPBn/HJ6JR3w0csfhU4jMHe126H9m7+B8g9/ACuTIfStbyHyhS+Apv4HAsCPfrTCC/D5Vv79+usjuP/+EJqb49+zQhYD2XoMiCUo8h0Uq6urC75LJ8qiC2lMkC2IrLC2thb79u3Db3/7W7z22mu4/fbb8eMf/xinTp3C8ePH8eqrr2ZcDDz66KO45ZZbuKjiJ598Ei+++CKeeuop3H333QmPf+yxx3DllVfiq19d4dc89NBDePnll/GjH/0ITz75ZO4vViRKxQAP+R4TTExMwGw2o7a2Nm3rPd2xpAAx+iHWxnV1dRmHMJHjSFUMsCzLkbR0Ol1G7xNZyHMxiKG7C8RLwefzJRAnUz0fKF4xwL8O8v9peSOQ2NYm9rGZyhuZGIMv/t8vIoYYPtj2QXyoO7G9KTOZUH7ttZCPjYGtrETgqacQvfJK7r+zLPDb367wAqamVs61d28U3/52EHv3Jn6vCu3gKJXhUKqIZ/JZkO8+idkmcjepOzl8kO/8xdgZEDqnkPtgTU0NPvCBD+ADH/hAVscNh8M4ffo07rnnHu7f5HI53v/+9+P48eOCzzl+/DjuvPPOuH+74oor8MILL2R1DdmiVAykgFSsfWBlJBCNRjE9PR3Hfs8GUnYGYrEYDAYDVCpVztbGUhAIGYbByZMnEQwGsW3btjhJpRikI++JPUYsFsPo6CgmJibQ2tqK3bt3i+7erJZiIB2E2trZyBufOP0Ezi2cQ5WyCvf135d4ntdeg/bGGyFzOhFra0Pgl79EbOtW7r+fPbvCCzh+fOX9bW5e4QVce23yHIFCuwHmk9lPs+RpouiJEydQU1PD5ZCQpECpCIp8XErFgFB8sdvtztljYGlpCdFolJNDEjQ0NMD4l3AtPog/Cv/xVqs1p2vJFKViIAWUSiV8Pl9Ox/D7/TAajbDb7QCA/fv35/zjlWLhDQQCMBqNCAQCaGxsRF9fX043gVw7A5FIBJOTkwiHw2hpaRFULYi9DiC32SfZoQErn1c27GIxYUWFQiaFRybyxurqajjlTnzzzW8CAD7X/bmERELVT38KzVe+Alk0iui+fQg89xzYvxTCVivhBSjBsjJotSy+9KUw7rhjhReQ7jVdCGOCbEGUPnV1dRwXRGqCIh+02VohsVpGE5dyLgFQKgYSINWYgGEYWCwWTE5OoqmpCQcPHsQbb7whaTBQNjcoWsLY2NiINWvWoLa2NufdQLYEQnoer9VqoVAosEFAXpbJdQDZeR6QAmlpaQlqtRr79++XZNQghNXQGRCDVPJGl8uFO1+5E6FoCNsrt+OA9gAXRFNdXo76b38bmn/8RwBA5LrrEHz8caCsDMEg8MQTanz/+2p4vSvv78c/HsEDD4TQ0iL+fbnYcwL4Ba3UBEU+otFoWpKk1CDBa4XuRiQLKcpVVrhu3TooFApOrUBgs9m43w8fjY2NGT0+XygVAymQTTFAFrfR0VGUl5fH7SxlMhkYhuGIXdmC2AhnUgywLIuFhQUYjUaoVCrs3bsXNTU1OHfunGTWxpkuwB6PB3q9Hn6/H1u2bEFlZSXefPPNnK4jG219LBbD5OQkzGYzGhoasHXrVoyNjeV0U+TP6/n/rVDFQD5u7KQr8K9T/4pT9lPQKrX42cd+hmXzMsrKyuCZmUH9N74BzenTAICZz30OvttvR1WEwX/9hwJHjpRhcpL4BazwAgYGMvvuXKicgUwgpruVC0GR76BYLCtiADk5l2aDfIUUqdVq9Pf345VXXsFVV10FYOU1vvLKK7jtttsEnzM4OIhXXnkFX/rSl7h/e/nllzE4OJjTtWSKUjGQApkWA06nEwaDAaFQCJs2bUJjY2NCp0GKhZf8cBiGEeU85/P5YDAY4HK5sGHDBrS0tMTppaUyMBJ7HIZhYDKZMD09HaemCAQCHIEw2xtvpp0BIqOMxWLo7+/HmjVrsLS0JKk8ka9RLzRnIB/nsvls+MYb3wAAfOPAN9C7rheuCReagkG03HEHFCMjYMvLYfvud7E4OIjTf/Th2LE6DA+v9P/r68P4+7934IYb5NBqM48Vvpg4A1KeMxOCIt9BkY7YLhTIPWO1dAbSebyIwZ133okbb7wRe/bswcDAAI4dOwafz8epCz71qU+hubkZDz/8MADgjjvuwHve8x58//vfx1/91V/hF7/4BU6dOoV//EtXrVAoFQM8ZDMmoCV5xKVPqMKWKlOAthFOBXpU0dLSgu3btycUD1KREcV0BliWxfz8PEZGRlBRUcFlGxCQ15XrjV4Mf4F2MuR7BkixWKcaExQ7WlgKfPXVr8IZcmJXwy58fvfnAQC6d95By4MPQuFwINbUhMAvfgHv+l34wVE1/umfVGBZGcrKWHz608v4+McnEYk4cfJk9vLGS2FMIJWCQYigSEtNCUERAN555528EBSFUKxiQMiC3ePxoK2tLedjX3fddVhcXMSRI0dgtVqxc+dOvPTSSxxJcGpqKu71HjhwAM899xzuvfdefP3rX0dvby9eeOGFgnoMAKViQBBkMUhXDBDpj8ViESXJk6ozIJPJUi7i9KLLH1XwIYU/AJC+M0BL9DZu3Ij169cn3OikIP+R46RyMiQ7o2ROhvm2NL7QxwT/Zv43vGB6AQqZAo//j8ehlCuhfPZZ7PzKVyBnGER37YLzmV/gR79px/e+9y4v4NprI3jwwRBaWjQAVngh2cobL/YxQTZpoplAyEFxYWEBZrMZNTU1eSEoCoG06wtdaDEMk3CvljKx8Lbbbks6Fnj99dcT/u3aa6/FtddeK8m5s0WpGEgBUgzwbwQsy2JxcRFGoxEKhYJrL6eDlJHIyYoBeg6fbNHlH0eq0COhBZjuTqST6OVC/qORbLEl700gEEgpW5TCxRDIjx2x1NeRKVwhF+56ZSWR8I49d2D72q3Q3Hcf1I89BgDwfPCD+Ldr/g++/j9rMTGx8nnu3h3FI48EsW9f4nuarbzxUigGgMLvmFUqVdzuWEqCohCKIStMdl4pOAMXMkrFQAqQRYs2qPB6vTAYDHC73ejt7UVra6vom0Q+g48ikQhMJhNmZmYycjWUckwQDoe5v5PMBYPBgPLy8oSRgBDEjj/SgV+Y0AVJW1tb2vdGqjHBaugMSI37/3A/5n3z6K7pxt3bbkPZDTdA9e//DgA4/aGb8YXFH+Lk360YRK1fH8MDD4Rw3XUMMlknxMgbPR4PWJbFuXPn4halfKU3Ftqmtxiaf6HXmIygSEKASDeBZdm0BEUhFKsYSMYZuFQTC4FSMSAIekwAgOsOmM1mTE9Po7W1FTt37sx4libVmACIlxeSAJ/q6mocOHAgLsErHaQiENLjBlIweTwebNy4EU1NTaIKJiJrktLWeGFhAXq9HmVlZaIKEvJ8qcYE5PXQN7wLdUzwp5k/4al3ngIA/GTrfVjz4Y9Ccf48YmoN/nHfP+Lz//E3HC/g9tvD+PKXw8jCYDMBQvLGpaUljIyMYN26dWnTG6VYbC6FzoCYgocmKBKffbEERSEHxdXSGWBZVtIxwYWIUjGQAiSad2ZmBpOTk6iurha9oAhByjGBUqmEx+OBxWJBKBTKyq2PXJNUagKGYTjXvpaWlqwKJik4DDKZDMFgEGfOnIHD4cDGjRtFh0CR50sxJgiHwzh//jzm5uag1Wq5G2M0GpXk+IVEkAniiy9/EQBwVPMhvOeGr0G+sABvZQM+GvstXv3Digzqwx/24pFHgNbW/BY7hDfT0tLC/ZtQemMkEhFsaWf6Oyl0MUC+H4U8Z7YLcyYERb6DYigUWlWdgdKYoIQ4kB+g3W7nonz7+vpQV1eX049Tqs5AKBRCIBCA2WxGV1eXqACfZJBi8SVV9dLSEkKhUNaufUDuToaxWAwMw2BoaAjr16/H4cOHM24d59oZIEYqQ0NDWLt2Lfbu3cu1VpeXl+H1ejklg06n4xapsrKyvNz8pehCfOfEd2B2mHHrqA73/ssrkIVCMKi24wrv7zGNNuzaFcWNN57FRz6yJierbbEQWpxTpTcSQpzJZAKQeXpjoaWFq2VMkC0yiXiWy+UYGhrKC0ExGUqcgUSUigEBBAIB6PV6LC4uQqlUYuvWraJifNMh185ALBbD1NQUzGYzFAoFOjs70dvbm/M15VKgEA8Dh8MBrVabk2sfkFsx4HA4MDw8DIZh0N3dje7u7qyOQ9r42ewGiWoiHA5zn084HEZlZSU3Az937hx0Oh3KysrgdrsxNTUFr9cLpVIZVxxUV1cX3IxFCOcXz+Oxt36AB14D7n/DBQD4HT6CGyLPorKxAk8+EMD11zM4dcoFID2RVgqI+WyStbSzSW8sRmegGPHF+VyEhciiExMTWF5eRkVFRV4IisnADypiGAaBQKBUDJQQD6IDPXz4MM6ePStZS1epVCIYDGb1XLvdzpnj7NixA3Nzc5L8cLMtBqLRKMbGxjA+Po7m5mbU19djbm4u5xtmNsVAOBzGyMgIrFYruru7YbPZUkYMp0M2YUexWAxjY2MYGxtDa2srIpFIUjKSTCaDSqXC+vXrsX79egAr7yex+KUldrneFHP9PKKxKL7yb5/H//lnJa4bWfmefAdfxQPqf8AXbo/izjt9yICiIimyeW3Zpjf6/X6pLz8lilEMFMMWGADKysrQ2dkJQHqCohBisVhC4ePxeACgRCAsIR4bN27kFkipY4wzXXiDwSCMRiMWFxfR09OD9vZ2yOVy2Gw2yYh/mR5nYWEBBoMBarUa+/btg06ng81mk8yvQOxxaM+A2tpazudhcXExp9Y4bX4kBna7HcPDw1AoFNz7cfz48YzUBAqFAjqdLu5mRLe46ZsiXRzodLq09ta5vBc/+/fv4dh9Ngy4QwhDhc/i/4f7Y3+Nt48G0daWeNxC7Z6lJGCKkTc6nU7EYjGcOnUqaXqjlCiG42GxChB6hy41QTHZOYF4C2S3280VipcqSsWAAKQKK+IjkzEBbWhUX1+Pw4cPo6ysLO66Cm0j7Pf7YTAY4HQ6BW2NC1kMeDweDA8PIxgMoq+vL26Mk+u1kNeUrm1KdyR6e3vR1tYmysVQrJpAo9Ggrq4uzlaW3+L2er3QaDRxC1R1dbUkXaNAJIBtt/4rBtxWLGEt7u59Hp/40T4MDmbX3ZIS+W7b8+WN4+Pj8Hg8qK+vj5M3KhSKhPdeCnljMRwPo9Fozrkp2ZxTjIIhW4KikIMiuQfT5/V4PAnGVpcaSsVAGhSjM7C4uAiDwZDS0EgqsyAxBEI66TAZKU9KVUKq62EYBmazGVNTU2hvb0d3d3fCXF2qYiDZgk3CqIxGI2pqagSdJ/MRYSzU4mYYhtsxuVwuTE9PxzHoiUa/srIy4/NqVVrIfnwMf7rpPkzc+xN8/442yOXJP+NCGykVWuqnUqnQ2NiYkN5Id2+kkjcWizNQjM5ANgVIJgRF/uchk8mgVCrjvj9ut/uSlhUCpWJAEMXqDPj9fhiNRtjtds7QKNmPU0qzoFRxyKQwUSqVXNKhEPLdGSCpiwaDAVqtNqXEM9drSTUm8Pl8GB4ehs/nS+tiWAjTIaVSidraWi5ghZ65ulwuxGIx6PV67uZJExTF7GD3fWQAjPUlbFdd+HkKuUDo90HSG2nSWSQS4RakXOSNl1IxIBVpMZOIZ5lMBoPBgFgsBpfLBYfDwRUKlypKxUAaKJVKSXbg5FhCCzhNxmtqasJll12W9kYtlWcB+SHyW+KBQABGoxHLy8vYsGFDWqdFKTsD/OPQ4wkxngG5Lrb0mICAEATHx8fR0tKS0lZZzDXkaxfNn7larVb09fVBoVBw5ER6B0sXByS5jg/lKiwEVmtqoUqlkkTeeDGqCYSQb9MhIQdFq9WKsbExqNVqvPrqqzhy5AhXsN1+++0YGBjA3r170dvbK8lnYLfb8cUvfhG///3vIZfLcc011+Cxxx5LyU9473vfizfeeCPu3z772c/iySefzPl6kqFUDKSBUqnk0rykOBa9gBPLXqPRCI1Gw5HPxEDKzgDw7o8yFothfHwcY2NjaGxsxOHDh0W18fLRGaCvJRPPACnGBPRiTgiCcrkcAwMDoj4j+vn8wqDQdsR0S5WA3jHZ7XZMTEyAYZiEBSpTglwhCYSFLgayVS9kI29kGKYonIELuTMgBsRITqPRcPLjm2++GY8++ih++9vfAgCeeOIJnD17Fh/+8Ifx61//Oudz3nDDDZifn8fLL7+MSCSCv/3bv8VnPvMZPPfccymfd8stt+Do0aPc33NRSIlBqRgQQL7HBORmQCx7N2zYkJFDHrkuqXbiwMqPcmlpCQaDAXK5HHv27Mko25sswFLFD5MFWCaTZX0tuUAmkyEUCsFiscBqtcYpOcQ+fzVkEyT7LIR2TEL+/0qlMoEgl89IW7Eohu5fqkVLjLzR4XAgEongxIkTKdMbpcTF2BkQc06FQgG1Wo3u7m788Ic/BLBCDnY4HDmfy2Aw4KWXXsLbb7+NPXv2AAAef/xxfOhDH8L3vvc97vMXAm2/XQiUioE0kJpACABGozGnjANAus4AqZSHh4fhdDrR09MTx4rP5HqA3G8oJH7ZYrFkvAAT5FoMEMOh06dPx0kWM8FqKQYAcSMJIf9/4n1AFqj5+fkE/b1Op+O8DwodvnQhdAbEgj/vnp2dhc1mQ1tbW8r0RinljZfKaEKMFbFarUZDQ0PO5zp+/Dhqamq4QgAA3v/+90Mul+PkyZO4+uqrkz732WefxT/90z+hsbERH/nIR3DffffltTtQKgYEkI/OACHAAYDL5cop4wCQphiIxWKYnJzkZEyHDh2Kky9mArrDkM2PmwQuLSwsQKvVZrUAE+Sy2Pp8Puj1erAsi+7ubnR0dGTdHpZaTVBoCHkf0Pr7xcVFWCwWsCyLqqoqhMNhOJ1OVFRUiNJ754KLPcI4FotBqVSKSm+USt54KYwJkp3T4/HkRU1gtVoT3GuJbbbVak36vE9+8pNob29HU1MT3nnnHfz93/89RkZG8Jvf/Ebya+SuK29HvkggRTHgdruh1+s598G+vj5U5BjnliuBcHl5GXq9HjKZDGq1Gl1dXVkXAuR6AGS1I3e73RgeHkY4HMa6detQUVGRdSEAZJfESPMTmpub4Xa7UVtbm5MMcDV0BqRewITihf1+P9xuN0wmE2w2G6amprj5NyEoVlVVSWqtvFoJhFJBaJcu1L2RUt54qYwJknUG6NCrdLj77rvxyCOPpHyMwWDI6voA4DOf+Qz3//v6+rB+/XpcfvnlsFgsWdusp0OpGEgCOsY420U3HA7DZDJhdnYWHR0d6OrqwhtvvFE050BgxdFwZGQECwsLXBv+T3/6U87XREh3mRyHYRiYTCZMT0+jo6MD3d3dMJvNOV+LXC5HJBIR/XiaIEjkkwsLCzkrEoqhJij0uWhDmMnJSWzYsAE6nY5bnMgONhQKoaKiIk69kE16IP/chUKhTYDEtuyllDcWqzNQjHPyR7NerzejXIK77roLN910U8rHdHV1obGxkesIEzAMA7vdnhEfYN++fQAAs9lcKgaKBVIMZLITIUmHJpMJNTU1OHjwINcJkEoSqFQqMyLskZAjk8mEurq6OEdDKZUJYjoDREVhMBhQXl6OAwcOcDKbTBdyIYjdeYfDYS49kM9PyDXGeLV0BooBhUIR530ArFgrE2mj1WrF6OhonJ0sLa8Tg4t9TJDL+bKVN0aj0YK/xmJ1I/idx0zHBLQzaCoMDg7C6XTi9OnT6O/vBwC8+uqriMVi3AIvBufOnQMALsskHygVA0lAdwaARA/tZHA4HDAYDGAYJsEmF5BOBUBLAtNdFwk5YlkWu3fv5hjk9LEK4R4IrHgG6PV6uN1ubNy4EU1NTXE3ICmUAOmOQUiKRqMROp0uYwdBMUhXDEgVfiXmOgqFVO+XRqNBfX0993vg28mOjY3B5/PFtbd1Oh0qKysFF4tLcUyQLYTkjbFYjBvvEHkjy7I4e/ZswZIzyT2nGGOCQsUXb968GVdeeSVuueUWPPnkk4hEIrjttttw/fXXc0qC2dlZXH755fj5z3+OgYEBWCwWPPfcc/jQhz6EtWvX4p133sGXv/xlXHbZZdi+fbvk10hQKgbSgHxphOZMNEKhEEZGRmCz2dDV1YWOjg7BL7nUZkGpigH6mggZTugGI6VHQLKigp7JNzU1YceOHYIqinwXA4Qg6PV6sWXLFjQ0NAguKrmy4/nFAL14FZpAuBq7EEJ2sgzDxLnFTU5OgmEYLq2OFAharfaC2qlng3wz++VyeZy8MRqN4o033sCmTZs4kqJQeqOU8sZiFQNC98x8FQPAiirgtttuw+WXX86ZDhEJI7Ay1hkZGeGSMdVqNf7rv/4Lx44dg8/nQ2trK6655hrce++9ebk+glIxkAZyuTzlAk4Y+WazGXV1dWlZ8FL6AySb0cdiMW5MsXbt2rTXlO8xASEr0jP5ZMhXMcAnCKaTdErRGUjXnSghHoRlTbe3g8EgVyCQtDq5XA6VSgW5XI7l5eWCeB8UgzNQSD8H8l2tra2Na3/z0xvHxsYQi8XiCrRs5Y1kLFFozgC/M8CyLDweT97ii9esWZPSYKijoyPuftDa2prgPlgIlIqBJBAjLyQmPTKZTLD9LgSpfQv4x3I4HNDr9YhGo9ixY4eouZbUOQcEoVAIRqMRCwsLCal+ySCVYRD943I4HBgaGhJVjNDHkIozEIlE4m56FzNnQMoFUyaTQavVQqvVcppvwp4fGxuD3+/H6OgoAoEAtFptnHpBanOei60zIHQ+IHGXLqQekUreWAwlQbLzer3eUlBRsS/gQgB/0aV9+zM16ZFqTECORRZfOk63q6sLnZ2dGV2TlJwBQqAcHR3FunXrEuKXxRxDiutIRRAUcwwpOgMmkwnj4+NxZLlgMFhQaWGhzlWI89DseY1Gg82bN6fcvdLz77KysqwX9It9LEF26enOKaW8sRjkQSBx5JvvzsCFglIxIAKkGIhGo5iYmMDY2BgaGhpE+/bzjyXFwgu8W1gQlUBtbS0OHjyYsUuVlMWA1+vFiRMnEA6HRXcm+MeQQuYYDAbxxz/+ETqdLqv3JNfOQCgUwtLSEsrLy9Hf3w+ZTMbJvYjV7Jtvvpmgxb+U89QzAb1YpvI+cLvdmJqagtfrjfP+z5QcV4yd+oVyvmzljcVwPAQSOwN+vx/RaDRvnIELBaViIAnoClmhUMBut2NkZAQqlSpjr3waUnYGgBVjC5ZlBZULYiHFAswwDAKBABwOB7q6utDV1ZVV1Z/rjtzv92N8fByBQAA7duxIShDM13UQMpDNZkN1dTUGBgYQjUYRi8VQVVWFpqYmaLVauFwutLS0CAYFkeJAp9Pl7OR3obgdZoNkr432PiBSLL73/+zsLOd9wLdWFjrupTAmkHKXLkbe6HK5wLIszpw5kzS9UWrEYjHO3ZHA4/EAQGlMUOwLWO3w+Xzwer1wOp3YvHkzWlpacvqiShGJTNrfPp8PDQ0N2L59e04/ZIVCgXA4nNVzSSSo0WgEy7Lo6OhAb29v1teSbWFCEwRra2vBsmxOIR+ZdgZo74TKykq0tLRwC0g0Go1rw5J/598sySzW5XLF7Wbp4kCMk5zQtV1syPQ1CWXd04uTzWaD2WwG8K72nrzvGo3moi8G8m3+IyRvnJ+fx8zMDBobGzl5o9frhVqtzrqDkw5CCgaPxwONRpOTA+vFgFIxkAQMw2BkZASTk5MoKytDc3MzWltbcz5uLp0B4t8/OjqKmpoarFmzBmvXrs25os92TEBkeh6PB5s2bcLi4mLOP9psOAMOh4NLONy7dy8YhsnJChTIbNYeDAah1+vhcDiwefNmrF+/HmazmWs/EvIgy7KIRCJwOp1cAUb+W7KgII/Hw5n1TC8w8rUAACAASURBVE9PIxKJcExuslhJFVQjBS6kCGONRhNnHkNHC7tcLs77QKPRgGEYLC0tQalUZlWQZYoLaUyQyznVajWampqSpjdKLW8k917683O73aiqqlo1v6FioVQMJIHdbofD4cD+/fsxOzsr2e4qW86Ay+WCXq9HKBRCX18f6urq8Oc//7ko1sbRaBTj4+MYHx+Pk+nZ7fa8GwbRIC15PkFQqutI95nTRMn6+nocPnwYKpUKLMtCrVbDYrHA6XSipqYGOp0OsVgMExMTKC8vR29vL3cO+r0n3QPyh97NklYrKQ74McM0WS5fRjHp3o9CQuqbt1C0MMMw8Hg8OH/+PHw+H4aGhrjZN/1+l5eXS3o9xTA5Koben/8ahTo4UsobCV+AflxJSbCCUjGQBA0NDVxQjc1my7m1T5CptDASicBkMmFmZgadnZ1xs/h8SQJTYWlpCXq9HkqlEgMDA3EMXCm4B2IsjWkHwerq6gSCoBQM+nRjAo/Hg+HhYYRCIezcuRPr1q3jFvZYLIampibU19fD7XZjeXkZY2NjXCcAAGw2G9f212g0iEajnD0r+V/6Wkj3gLRaaakd2Um5XC5uJ0UWK4ZhOPXCxbTzKdRiqVQqUVtbC4VCge7ubuh0uriCbG5ujvM+oPke2SYHEhTa12A1JxZKKW9MZjhUWVl5Uf0+skGpGEgCWmajVCrh8/kkOa7YMQHLspidncXo6Ciqqqri8g3oYxWqGAgGgzAajVhaWuI8A/g/HimuJ11nwO/3Y3h4GF6vF5s3b0ZjY2PCdeTDq4AgFovBYrFgfHwc7e3t6Onp4c5H/pCFW6VSIRQKYW5uDmvXrsWGDRvAMAxcLhdcLhfMZjNnwavT6bgOAiGxkeOl6x6QmGEyxiKzcJfLBYZhMDo6CovFEkeUy5dRTyHHBIUEKT6SFWRC0jrifUBL68QuuJfCmCBbn4Fc5I2RSCThnG63+5JXEgClYkAUpFQAiBkT0JHHqSxzC5EpwLIsJ11ct24dDh06lJRoI5fLsyYiprsWvp1xKgdBqbwK+AsOSTdUKBTYv38/qquruV08OR9ZMPx+PwwGA3w+H7Zu3Rqn9KisrOQseCORCLdwLy0twWKxcMoDUhxUVVWhrKyM6x6QP8m6B/QsfHl5mYunJrtZm82GQCDAzWFJcVBRUXHBSBtXk+4/mbSOLEx2ux3j4+OIRqNxwUA6nS6p98GFriYQAylNh8TIGycnJxGJRCCXy2E0GhEIBBCLxeByuUpjApSKAVHIt2sgQSQSgdlsxvT0NNrb29Hd3Z1y9qtQKCQZXyQrKlwuF4aHh8EwDNcKT3ccqRZh+uZLCIIARMk6pR4TCHETiEqA7NzJQkzsqS0WC5fBkOozVKlUWLt2LedeSTTyLpcLTqcTY2Nj8Hq90Gg0XHFAuge0yVMsFkv4DMliwrIslwNAQM9hFxYW4pj0tHohl1Z3PlEMdn8m5xP6XOnW9vT0NAwGA8f3oNUiKpXqolMTJDtnPr9fQvLGqakpWK1WKJVKvPTSS3j00Ue57trdd9+NgYEBDAwMoKWlRZJr+Na3voUXX3wR586dg1qthtPpTPsclmVx//334yc/+QmcTicOHjyIH//4xzmptMSgVAwkgRg74mxAFl76ZkbPwCsrK+MifVNBygRE+jiEpzA7O4vOzk50dnaKquCl4AyQGxLZbY+OjmJubi5l0JLQMaQiMlqtVk4uSLgJNDeA3pGTjk4sFsPu3buz8qKgNfI0iY10D8guk2EYbgEhf9RqdRzvYGlpCcFgEAA4vgK5XqVSmTCHFWLSkxEGnSKY7DO4GCWMBLkWH8nUIqS17XK5MD8/zzHnI5EIlpaWIJfLC9KxuZDGBNmCfPfLy8vR09ODe+65B3fddRfuueceGAwG2O12PPjggxgaGsI3vvENHD16NOdzhsNhXHvttRgcHMRPf/pTUc/5zne+gx/+8Id45pln0NnZifvuuw9XXHEF9Hp9XuWPpWJABFQqlaSdATrH2+PxQK/Xw+/3J52BJ4PUnAG6KKmqqsKBAwcSeArpjiPFIgwAc3NzMJlMggRBMcfgdxcyRTQaxeLiImZnZzm5ILCyMJNj02FRY2NjmJqaQkdHR0ZW0GIgFOATCAQ47gHRZ6tUKtTU1KCyshJOpxMulwu9vb1xu1N6pAG8O9ZIxqTnFyFkhEGPF4qhz15NY4JsoVAoEvgepGNz/vx5OBwOzMzMcJ0dvrWylChGTkAxRhP8kCK1Wo1YLIa9e/fi0UcfBbAimQ4EApKc78EHHwQAPP3006Iez7Isjh07hnvvvRcf/ehHAQA///nP0dDQgBdeeAHXX3+9JNclhFIxkAKk3Sx1ZwBYIeRNT09jamoKbW1t6O/vz1gOJmUxwDAMTp06lZKYlw5SdAbITtZkMuV0HUB2NxsiF5ybm4NWq42TC9KvjSyidrsder0earUa+/btE9XRyRX0LpN22HO5XJidncX4+Dj32NnZWfh8Pm7RIQY6pHsgxD0gOyi5XJ60CKFNYjQaDaqrq7mdbmVlZd5v8oUsBujiL98gzHkA2LJlC7RaLTc24hvz0MVBdXV1Tu/5pdAZIOcUUhPQYwHSmSsGxsfHYbVa8f73v5/7N51Oh3379uH48eOlYqDYIIulFDcg8vyTJ0+ioqICg4ODWZNXpCgGotEoJicnAaz8CNJF+6a7nmw7A0SDb7FYAKxwA7Jl+NKz8kzg9XoxNDSEUCiEhoYGqFQqqFQqrmsCvLtYRiIRjI6OwmazoaenB62trUWVJkUiEUxNTcHpdGLbtm2or6/nJHDEG97j8XCOhuQPWbhp7kGq7gG/CCE6fKIBt1gsGB0djQsJSkWUywWFVi4Uo/hINjaijXmmp6cRDocTdPfJrJWFUOjIZKA4xQDDMAmvczX5DFitVgDglCoEDQ0N3H/LF0rFQArQnQFAuKrMBF6vF3q9HgDQ3t6Orq6unG4wuaocFhcXORITAGzYsCGn15ftrJ5PEHz77bdz2qWQ91TstdBywba2NvT09GB8fBzBYJDjBpAbM7FfHhkZQXV1NQYHB6HVarO+1lzBsizm5ua4hMgDBw5wpCwS/8t3NCQjhOnpaYRCIa4FTf6UlZVl1D2ora1FbW0tpqamsH37dqjVam68MDMzw33H+LbKuXzXCslPKHQxQCtThEC8D2hOSjAY5IqD+fl5jI6OQiaTxZETU3kfRKPRgo97itUZ4L/OTKWFd999Nx555JGUjzEYDNi0aVNW11gslIoBESA3LX70pVgwDAOLxYLJyUm0trbC5/NhzZo1Od9csiUQ0p4BGzZsQHNzM15++eWci51MxwRkd80nCOYaVkSPCdKBlgvu27cPOp2O25XZbDYwDAOdTofa2loolUqMjIzA5XJh48aNWY0wpEQgEIBer4fP58O2bdvSJkQKubsFg0GuezAzM8MZStHFAbHfTdc9AFYWTlKEkN0NGR+QVjcJCeLbKmfi4lfoMQGQfHFeDefj+/7HYrE4Qiixxya6e/Ke052hS2FMIHQP93q9GcUX33XXXbjppptSPqarqyuby+MKd5vNxnXfyN937tyZ1THFolQMiIBcLs9qF07Ca4xGI8rKyjht+vLysiQchEzHBLFYjPMMIPa5JIKZEOFyvR4xCzDZXRsMBs5QiSYI5jr+IDvXVNeSTC5IFrnm5mZUVlbC5XJheXkZZrOZ81JvbGyEQqFAJBIpivSO8BrMZjMaGxuxffv2rFu8yRwNSfdgdnYWwWCQa/uTP6QbQjonMzMzYBiG85pIZoxEkMzFj2+rnOx1FaMYKHRnIJfzEUfEqqqqOE8LknVBJ2VWVlZyZjzELKkQr3U1uB6yLMvxXMSCzrOQGp2dnWhsbMQrr7zCLf5utxsnT57E5z73ubyck6BUDKRALvJCOsRn48aNaGpq4o4nlYmRkEwxGZxOJ/R6PRiGwe7duzmGOf9YuUBMZ8Dv90Ov18PtdiclCKZbyMUgldeAGLkgkd6VlZXBbrdDpVJx1T7tHqjVauP0/9kGqIgF+V4RG2RC7pMKcrk8YeEm3QNid2w0GrnHlZeXw263IxqNYteuXaisrBRlq6zRaFBfXx+3k6VldlarlTNGoscL9Bz8Qlqcszmf1N8jId09+WzNZjOcTidOnjwZ532QrijLBaulM+DxeDLqDGSCqakp2O12TE1NIRqN4ty5cwCAnp4ergDZtGkTHn74YVx99dWQyWT40pe+hG9+85vo7e3lpIVNTU246qqr8nKNBKViQCTELuDRaBQWiwUTExNoaWkRJORJ6Q+QTkJHt+K7urqSyt6kkAWmOgZNECRmPPl2EOQfQyhdEHh3d8s3DxobG8PExARaW1uxe/du7sZFmMeRSIRrsS8sLMBkMgEAqqur4woEKboHpKtjsVjQ0tKCnp6egt1Ik3UPJiYmMDMzwxWBIyMj3GuuqanhugdibZXJwkPeXyKzc7lcccZI1dXVCAaDUKvVCIfDee/OFKMzQNuh5wsymYwb6czMzKC1tRV1dXVxIx26KJMiNZCAfB9Wg+uhx+PJmx3xkSNH8Mwzz3B/37VrFwDgtddew3vf+14A4EaPBF/72tfg8/nwmc98Bk6nE4cOHcJLL72Ud05HqRgQiXSdAZZlsbCwAIPBAI1Gw82fhSBlZwBYqXb5N8R0YT58SGUYJNSpyNRBUCq/AnKMVOmCZKGid62kiyKTybBnz56kn6NKpUow7iE3UqfTCZvNBr/fz+1uSYGQaSgKCUWKxWLo7++Pm/kXA8FgEKOjowiFQti9ezfWrFnDtf3Jrn5kZCRuPEAT2MSGMgkF1Ph8PrhcLoyPj2NpaYmTgPLn4FLuqsn3uZDFQDHihBUKhaCtb7LUQNpamXgfiH2PyL2m2J0BhmHg9/vzVgw8/fTTaT0G+B1MmUyGo0ePSmJ6lAlKxUAKiB0TEB96p9OJjRs3orm5OeWPQsrOAICEYxHVgs/nS5ltwD+WFJwB4N2bp9iuBB9SdgZouSA/XZAmaslkMjAMA7PZjNnZWXR1dXGRyGIhk8m4OS29u6UXydHRUQCIWyRramoEuyQkj2FiYgLt7e2inSDzBZqr0NTUFNctEWr7+3w+jnvAL4zo7kEmoUzEGGlhYQENDQ2oq6tLulDR4wXCjckGhU4QLHR8MZB6fi9UlPn9fu59n5ychM/ng0qlSrBWTkZILlYxwO8MeDweAMjbmOBCQqkYEAmhYoA4z42Pj6O5uRmHDx8W1bKUysRIJpPFLeL0iIK0tsWqA6TiDJDrIMRJei6fyXFyLQYAYHp6GlarlZMLko4DP10QWJFZGo1GaLVa7N+/XzLTEbVaHUc44i+SpA1LIofJIskwDPR6PeRyOfbu3Vv0VDWSFimWq0AT2Gh3PVIY8ccqdPeAjnROJm0k/54s24GMF2hjJL6tstiFaLXnIEh1TrEFCO19QI/a6ChtohipqKhICMMiZGX691cIkN89fU8kxUAhzMJWO0rFQAqk6gyQkYBKpUo5EhCCVM6B9LEWFxc5JzyiWsjmOLleCwCcPXsWXq8XmzZtwvr167NyEMylGHA4HAiFQnA6nXFyQaFuQDgcxsjICBfNnK6rkyuSLZKkOCCjHSLRq6+vRzgcRiQSKbgpDJC6G5Ap+IURPVbhkzLpwohIDknnYGFhAR6PB01NTVxKJm2MxF+oiEkPGd9MTk6CYRjRCYLFKAaKNSbIFkKyVTpK22q1csUfSeGUyWQIhUI5dW0ygVA3wuPxZBQtfTGjVAyIBCkG/H4/jEYjHA4Hent7s3KeUyqVkqQNAuDiOIlqoaWlJasbV67FACEIAis3fTKXzwbZFgP0WEKtVmPjxo2orq4W7AbQZj21tbU4cOBAwW5KfKjVatTX10OlUsFms6Gqqgrt7e3cTpruHvCTC/O5SNHdgF27dmUVvJQKQmMVQsrkRzpXV1ejqqoKHo8HHo8HmzZtQl1dXcrugZAxEhDPoqcTBPltbmLxW+i2fbE0/1Kfk47SBuI5H0tLS4jFYvjTn/4U17Uhn3M+xgdkM0cf2+12o6qqqqh+IasFpWJAJBQKBZaXlzE9PY3169eLHgkkO1auYwISlUtSzmjPgGyQC4HQ6XRieHiYu2n29PTktIvNphjgywXPnTuXNF2QmPV4vV5s2bKFm3MXCwzDwGQyYX5+Ht3d3Whra0u4OdHWwnx5H01OzMU0ikDKbkCmECJl+nw+zMzMYHZ2lmsxWywWLC0tca+bFEZ818RktsrJ3BnpNnc4HEZFRQXKysoQi8UKpsEvdDFA3qt8n5PmfJSVlSEYDKK/v5/jHhDb7EgkkmCtnIkhVTIQvgB9HNIZKBUDpWIgJeh5MkkPE8OGT4dcCYQOh4OLyq2oqEBra2vOu9psGPx01DEhCL722mt5kQUmAy0X3LRpE+ffLpPJsLi4CJVKxbUBaXlermY9UmFpaQkGg4HjKiTjVggR9OjW99zcXJw5EFkkM72J5rsbkCmi0SiXQU8+XxLKRAyhxsbGEI1GOdIgee0ajSaOmJiqeyCTyQTdGd1uNxYWFhCNRvHWW29xBRjdPZCiAKNR6E4EGZ0VksxHOhFCiZy0tTLfkIru3GT6200WUrRacgmKjVIxkAKhUAjnzp3D8vIy1q1bh0gkIsnNMVsCYTgcxujoKObn57nF9/Tp05LGGIsBcVYkO3E66lhKiWK6a0glF2xubobVasWZM2cArIQwBYNByGQy9PX15c1BTCyIA+Li4mJWXAW6K9DW1gYg3hyIZALQMbk1NTVJFy+WZblCqdDdgGQgVtFarTYuA0KpVAqSBslrHx8fh8fj4drPdPeAFIViQpmIv4JSqYTX68XAwECcBn9+fh7BYDApSS5bFJpASH5rhSxAkhkO0V0b2teCNqSy2WwIBAKcpJQmhaZ6Dfz4YqBUDNAoFQMpoFAoUFZWhsOHD2N5eRlTU1OSHTeTBZPMt41GI2pqauLY+VLGGIs5DpFRulwuQYKg1B4BQhAjF2xqakJzczMYhuFshysqKjgXMMLeJ7tBKdqQYkHIpyToSCozESFzIHIDJQUCyQQgC2RNTQ1isRgMBsOq6gYQiaeYRMhkyX7ktTscDoyPj3OkQb4hVLpQJrpwF9Lg0wY9fIUEeXwmI8VCjwny5XiYCpm4D9JdAZpbQj7f5eVljI+PIxaLJeRd0KTQUmcgNUrFQAqoVCps3rwZgHRywEyP5fF4oNfrEQgEuGha/uIrVTGQitRIOApmsxnr16/HoUOHBG9wUnUGhIoBoXTBVHJBu93OJebt27eP+9HT7H1SZJEdNL1QSL0zDoVCGBkZgd1uL0jQkVwuTxlMND09zZlBlZWVoampiSuqitUVIPwTotLJVuIp1H4OBAJcYUQkhyqVStBOmhQHoVAI8/Pzcb9ZunuQTDpKOycSrgHfVjnZ4lvoYiAajXLjkkKeM5fvmJCklHy+brcbU1NT8Hq9nLWyTqdDJBJJeI35dB+80FAqBtKAMM+lLAbEEAjJ7mhychJtbW3o7+8XbO9K5WaYahEnN2jigJdKYy5VZ4D/mhwOB4aGhhLSBYXkgoTLYLVaBQl5hL2fbP5O58PTO+hMHNZo0LHHa9asweDgYNGUC6R7UFlZCbfbjbKyMnR0dHBz+JmZGY7ARS+S+SbOkUJvamoKXV1d6OjokPR8MpkM5eXlKC8vj9PG052TycnJuNeuUCgwNzeHyspK9PX1xdl/C3EPyB+hgCByHtoYia9cIN+JYnQGih0YlCuSfb70WMdut4NhGJw8eZKTE9tsNsk8RWh861vfwosvvohz585BrVbD6XSmfc5NN90UZ10MAFdccQVeeuklya9PCKViQCSk7gykChhaWFiAXq9HWVkZBgcHU7axpOwM8BdxsqjOzMygu7tblIOg1LkCtFxQKF2QbxVLzI6qqqri5szpzic0f3c6nRzDeXh4GGq1Oq57UF1dnfb9CAaDMBgMcLvdq0K5kI4bQMvuyGv3eDxQqVQJr12qm7nH48HQ0BBkMhkGBgYK1rZVKBSCkkOHw4HJyUl4vV7u+kZGRuLspOnfcDpb5WTGSGSRGhsbg8/n4+KFiQKmUIv0xVAMCIHmywDA+Pg4vF4vGhsbcfbsWfzud7+DwWDgDL727duH/fv34z3veQ+nZskW4XAY1157LQYHB/HTn/5U9POuvPJK/OxnP+P+XshNQ6kYEAlSDEhhQKJUKrmbB/2DCAQCMBgMcDgcomyNybGk8Cygiwo+QfDgwYOiq2cpxgSkMEmVLkiHx8hkMgSDQRiNRs4SOtcWfFlZGRobG+OkZ0T+ZLfbMT4+jmg0yu3saAY7sPIezs7OcnHRBw4cKLpygU48TMYNSCa7IztbYtoTiUQS2PuZdk6IN8X4+Dg6OjpE21XnC6SrNDExAaVSiYMHD0Kj0SR0jfi8C/LayWsSY6ucjONAExPfeOMNQVtlqTs0xRgL8Z0AC4FoNMp5H9x666249dZb8alPfQptbW3YsWMHTp48iYceegiRSATXX399Tud68MEHASBtLgEfGo2G+90VGqViIA3oMQEgTELJFHSmAFn4yDy+sbExIw8DqQmERIPvdDq5ZL9Mbj5SXE80GoXdbsfS0lKcXFAoXZBlWczMzMBkMqGurg4HDhzIS4qd0C6S7O6cTicsFgu8Xi+0Wi0qKyvh8/nAMAy2bdtWdOUC6QaYzWY0NzdnrBRItoMmvAuh+XtNTU1K8xifz4ehoSFEo9GUYVCFAl2YdHZ2oqOjgytMCO+ivb0dQDzvQki1Qfvyi+0e0ByHaDSKcDiM9vZ2rggjM3DSoaH9/3NdyIvRGWAYpuCjMoZhEgpyr9eL3t5e3Hzzzbj55psLej1CeP3111FfX4/a2lq8733vwze/+c2EuPl8oVQMiAQpAITysDMFHYzj8/k4Ele6ebwQpCoG5HI5/H4//vjHP+ZkqpTLmIDIBcfHx6FSqdKmC5KdbjAYRF9fX86tvUwgtLsLh8Mwm82cA2I0GsX58+cTjIEK2SGguwG7d++WRClAdw/o+SyZvTudTkxMTIBhmLjcgZqaGmg0Gq4waW1tRXd3d9EljH6/H0NDQ2AYRlQORLJIZ/LaZ2dn4zwfaN4FeXyq7gHR4JMZON8YiXZOpA16SJGQKb/jQrQ/zgbRaDRBubOa1ARXXnklPvaxj6GzsxMWiwVf//rX8cEPfhDHjx8vyHtVKgZEgtiaShUwRGyEl5eX0d3dHbcTyQRSEAidTidGRkYQDoexd+/ejAsS/vVkUwzQcsHW1lZuF0QH1pAigKT5jY+Po6WlBbt27Sp4y1Ho+vV6PcLhMPr7+1FbW8t575MdtNFojLMVztYYSAxobkBzczOnvMgXFAqFIHuf7h54PB7uu9/U1JSgjCk0yChndHQUTU1N6O3tzeo9EuKc0JHOQo6RZFdPRzrTHZfa2lqEw+G44pfv/0/UDqQ4mJmZgcfjiWPQE5Jiqt9HMcYExTin0EYuEzXB3XffjUceeSTlYwwGAzZt2pTV9dGjib6+Pmzfvh3d3d14/fXXcfnll2d1zExQKgbSQGyMsViQGxBpBR46dEgUyS0ZcnEzZBgGo6OjmJ2dRWNjI5aWlnIqBIDMOQNCckGbzQaXyxVnJUxuHC6XC3q9HgBWXXuZv9OlmeUklIheJGZnZ+NazFLJGsVwA/INPrt7dnaWU1OQjIFz585xzoFC8/d8IhQKQa/Xw+PxYMeOHZK3YoUcIwmz3el0Yn5+PiGtkqSgrl27Fu3t7Vxhzf89CRkj8bsUZLxAnCnJeUiRQBegF0sWgphz8smyHo9H9D3krrvuwk033ZTyMV1dXblcYsKx1q1bB7PZXCoGVhtyLQY8Hg+Gh4cRDAah0WjQ3d2dUyEAZDcmoAmCFRUVOHDgABiGweLiYk7XQq5HbGcgmVxQoVDA7Xbj7Nmz0Ol0qK2tRUVFBSYmJjAzM5Mw0y0W3G43ZwsttjBJZitMlAtE1pgNOa/Q3QAxIHbRXq8XO3fujFt0+byLsbExeL1elJWVxb12qVPliFpn7dq1GBwcLMjYhjbO4Uc6OxwOWCwWhMNhyOVyRCIRzM7OckWCUqkUbasMgHseXYDS6YGjo6Nx1xOJRAreoVktnQGv1yt6TED7SRQCMzMzWF5e5kZx+UapGEgDKToDDMPAbDZjamoK7e3t6O7uxttvv11wG2EAcQRBQs6TyWTwer2ScQ9IrGwypJML1tbWYs+ePXEM7kgkAoVCgfr6epSXlyMcDhdkBymEaDSK8fFxTE5O5syCp1vH7e3tCdI+Qs5Tq9UJ5Dz6nKuhG0CDZVnMz89jZGQEdXV1gotuMlZ9stRCIdVGJiBulAsLC5x7ZjGhVquhVquxuLiI8vJy7N27F9FolBut2Gw2+P1+lJeXx/EuCCdAbCgTPz2QGCOR8cLy8jIikQhOnDiRYKucr4J7NYwmSGcgH6ZDU1NTsNvtmJqa4lxPAaCnpweVlZUAgE2bNuHhhx/G1VdfDa/XiwcffBDXXHMNGhsbYbFY8LWvfQ09PT244oorJL8+IZSKgQyQaTFAstdJEA3tGSCVb4HYYiCdYoEcJ1fpZLrOgM1mg16vT5AL0jcz0jbXarVwuVxgWRY9PT0oKyuLmz/TO8iampq03uRSwOl0Qq/XQy6X50UTn0zaRxZIIVljJBLB/Pw8WltbV0U3IBwOw2AwwOl0YuvWrRl5KwjlDpCFy+VywWw2w+fzcY5+5PNP99mTLlR5ebmkFtDZgmVZTExMYGxsLMFkiR4rke4BcTPk2x3TxMxMugdkfAWs6O99Ph8aGxu5YCaz2cw9jh4vSKXUKVYxQHcGAoEAGIbJy6jxyJEjcQZCu3btAgC89tpreO973wsAGBkZgcvlArByz3vnnXfwzDPPwOl0oqmpCR/4wAfw0EMPFUx1USoGMkAmCzjx8Ce6d75ngFTOgWKKAZfLheHhRY/T0wAAIABJREFUYUSj0aSKBfLDzJXlm4wzQMx37Ha7KLkg2VXW1NTE3bzJbk5oB8mybN6Y+8QRkhgwtbW1FWxMIUTO8/v9sNlsXNeEZVksLi4iEonELZCFbv+S8VNtbS0GBwdzXjzo2Fva0U+oe0CT82pqaqBWq+OcDXt7e9PmHBQCgUAAQ0NDCIfDacdLfLtjUhyR7oFQcSQU6ZwqlCkajSaNjibjBdoYiS4Osi3AizUmoM/p8XgAIC+dgaeffjqtxwDxSgEArVaL//zP/5T8OjJBqRhIg0zHBIRQZrFYUkr0co0x5h9HaEfPMAxMJhOmp6fR1dWFrq6upD9c8u+5/kj5nQE6XbCuro57P4isii8XJMZLHo8Hmzdv5ohRQq+bv4OkCVqEuU9H+tIt1kywvLwMg8EAjUaD/fv358W+NFMsLS1hYmKC4wbEYjHutdM7SPq1V1dX520+HolEYDQaOW+IfOYuJFu4+AtkWVkZtwAQv4diFwLESKuhoSErFQxdHPFDe5xOp+BohV8c0d0DhmHg8XhQXl7OcQfIvYCcRyj8iXSoYrEYqqqqEsKBUqEY+RfkddPvt8fjgVqtLnqXaLWgVAxkgHTFgN1uj2O6p5rbStkZAOJbYGQ8odfrUVFRIcpBkO4M5ALaZ4CWC+7YsQN1dXXcDYgvF2RZFpOTk7BYLGhsbERfX19GCxfN3Cc3ScLcJ+Ywer0+wRgnlaUwnXEgJj2vECC+FOFwOI4boFAo4hZIMhcmxETCXqeLI6lkjUtLS9Dr9ZwFdKFvrvwFkmVZjI2NYXx8HDqdDjKZjPPyqK6uTkgtLAQYhuGKpUxHJ+mQzO6YFEd8Yib5/GUyGfR6PViW5X4z5PdJQHMPUoU/ud1uTExMwOfzQa1WxxUHfGMkehxYKJCNF31Ot9uNqqqqov+mVwtKxUAGUCqVguS4cDgMo9EIm83GEeLStc6k6gzwiwHa0pgmCKYD2RFIkThIOhLJ0gX5wUIkmZFhGOzcuTNneSMBn7nPt9WdmJjgZu90gUBIXURtITbjIJ+gXQRbWlrScgPkcnlSWSNdHCmVyoTiSOxNmkhTrVYrNm7cKPq7lk8EAgFOsbNnz544TT7dOeKT8+jcAalfg9PpxPnz51FeXo79+/fnvViiiZlktEKP1ex2OywWC2fPW19fj0AgwBEaacvvdKFMycKfSKdiamqKM0YixQEdv14oCBUDXq+XI/OVUCoG0oI/JvD7/dzfiRXu6Ogo1qxZk5FngFSZArSb4fz8PEwmU8aWxgRSuBkGAgF4PB6wLJs0XZB2WiOs/La2NnR1deXdGCeVpTBpL5PCpbGxEe3t7UVvI9LdgFxcBIVkjXRxRG7ctO6fpDXyYbfbMTw8zBFjV0OxRHgmDQ0N2LlzZ1xLWKhzRJPziOQOQNzuORfeSSwWw9jYGCYnJ9HT05OQnllIkLFadXU1vF4v5HI5NmzYALlcDpfLxYX4kDAu8vorKiriyMXpbJWTWVeT7xkxRgKAoaGhBPvmfIGMi+j3v9QZiEepGMgA9G6eaMxDoRD6+voybvtJZSMMrBQEZ86cAQDs3r07awOVXK6JyAVnZ2ehUCiwf//+OLkgMTYhPzyHwwG9Xg+FQlHQpDoa9A5q/fr1HPmN7Ba9Xi/eeustyOXyOMfAXE2BxCLTbkCmoF8XLWvkZw4QWSORNNpsNk4WuhpGJ7R6IZMsCD45jzYG4jtG8hfIdK+Ztjgu1vebD9KhIN0uwlKnyby0pXSyQCqyyRAbykTUMYT/4/F4cPr0adTW1sLtdmN2dpYLf6LHC1I6cwpxFPIlK7xQUSoGMgAZExgMBkxPT6OjoyNrb3UppIWkHR+NRlFTU4OtW7fmxHDPdkxAywW3bdsGk8kUVwiQY5NUODKH7+7uRmtra9HNg0KhELeYENIi7c7GT60jpkDpds+5QKpuQCYQyhwgpDGn0wmr1YqRkREAK7P3UCiExcVFbrRSDCwuLkKv13Oqk1yuI5kxECmOSOeB9obgEzNZlsXc3BxGRkZysjiWErSMMVWHQki1QheHk5OTgnHWlZWVGXUPSPAbsW4GEGerTN4/8nnQtsrZdmmSWRGvhiJttaBUDKQB+dEQgwq32w25XI4DBw7kNG/KlUBIFuCKigru5p3roppproCQXNDpdIJhGEQiEQCI6wYsLCzAaDSioqIC+/fv52aHxQK5cY+OjmLdunWCiYd833mh3TPxPKCLg2wlV/nuBmQKwimw2+3weDzo7u5GXV0dVyCQ0Qo9exe7e84F0Wg0jq+QabqmWKjVakFbYfL503a/pAVPgrOKnVYJrPxGCYlXTAgTjWSBVKTlTwoEwgmgO2ek6yDUPfD7/Ry3iDZGEnqfaefEQCDAfc9IkSD2e1bqDKRHqRgQAUJKcjqdUCqVGBgYyPnGky2BUIggePz48YK6GaaSC5LK/fXXX49rq1qtVrhcLmzYsCFvN+5MQN5Hr9ebUWs52e6ZdA74ngf0DTLdrqYY3YB08Hg8GBoagkwmi2t3V1VVxen+yeJIZu8ymSxh9i7VTNjpdGJoaIiTehaSr0B3DwhCoRBmZmYwOTnJcWHIPJz+/AsdprW4uIjh4WHU1dUlcCiyRTJOACkOpqenMTw8DKVSmdA9UCqVXPFNVB/Jugf0+0xzPEhxQBsjkceRIkGoO5SrFfGlgFIxkAaxWAxvvfUW1q1bh87OTpw7d06ShSzTzgCR3plMJjQ0NMQRBKXiH4g5jtfr5djatFyQeAao1WpcdtllnLRpbm4O4+PjAICKigq4XC7IZDKutV7oooCQPgnRMlMJoxCSeR7Q7WUi66O7B8TzgJZVroZuABAfwNTe3p7So0KlUiWdvZPvAB3pm63nA03I6+7u5mysiwni7DkzM4Pe3l5ukUsVaZzPtEpgZRdsMpkwPz+fd9vlZI6Z5PUT0mAwGOQyFlpaWtDc3Mz97uixQqpQJrVaLegvQcYLZrMZfr8/TkJZXV2NyspKwc6A2+0udQYolIqBNJDL5Th48CCnJCAa+UJ2BoiDIMMwggTBQrgZkhvx2NgY2tra0N/fHycX5JsHyWQyWK1WhEIh7Ny5E9XV1ZzmfWpqCsPDw3HEtELYCdP+/flIqiNIllZIXj/teVBZWQm/3w+WZROCfIoFn8+HoaEhRKPRrJIhhWbv9O6RL2ski2MqWaPP58P58+fBsuyqIeQRHw0A2LdvH+flQXdFyFyczpugXz9dHPw/9t48PMrqbh+/J/u+QUgIkJCNJLMEJJIVBLQVX7WtSy3WguACWpWK4qsWt1apFLVqi/trFTdE+bpVUSsuhLDJIpqZLJN93zNLMvv6+4PfOZ6ZzCQzk1kedO7rytU6zCQnT2ae8zmfz71MFTXs6prEYjEN/wrEKM4+almlUtFDFCENHjt2DKGhoRN8H4hPiau2yo7cKYm0cWRkBG1tbbBYLAgPD0doaCiGhoYQFRVFRzqEPBlEsBhwCcS5KywsjJ6Cp/uhJQTCyQoL1kEwOzvbqfTOW54FzgiExNc9JCTEqVyQFAHkRNnW1oY5c+bYtCfT0tIoo5gwl5211r3ZWrZYLDTNL1An78jISJvfn/xte3t7ERUVRcNMHHke+Au+5CvYR+2S0yNLTmNljWwgUXd3N5qbm2n2QqAJp2x3icRWT7UmR1HDrKyzu7sber1+AnPf1e4JiUZvampyeU2+BkumJNJhsiaWmEu4F0S5wRYHZATEkpEnC2VyZsDU3NwMnU6Hjo4O/O1vf4NYLMbs2bOhUqlw5MgRLF682Csk4I6ODjzyyCP4+uuvMTAwgIyMDKxZswb33XffpJ9lnU6HLVu2YM+ePdDr9Vi1ahWee+45pw6svkCwGHADZGNyNH9yF6GhobTydfRhJzK36OjoKcmKvhoTsOmCubm5NEzFmVxQqVRSR7OSkhJ6MnD2s+yZy85a68nJyTatdXfAGhpNtSZ/gXADjEYjSkpKkJycbOMaZ0/MYzdHXxHzWLMef/AV7E+PLDFToVCgvb0d4+PjdPOYM2eOX2+MzmAwGFBXV4fx8fFpGWTZyzoB2BBTu7q6bJj7k5lCGY1GmkTqTdOu6cBkMlFysaMuHEvMJSCKAlIcNDY22jyP5d640z0gJOv4+Hjk5uZi165dOHLkCJ588kl0d3fjsssuo9fuxRdfpKFCnqCxsREWiwUvvvgi8vLyIJFIsGHDBqjVajzxxBNOX3fHHXdg37592Lt3LxITE3HbbbfhiiuuwOHDhz1ei7vgWdm0hCAcwmQy0U3yiy++mLaSADhzMtq/fz/OP/98m4qR5L/L5XKHAUeOQPT6BQUF01oT+31YuaBAIKDpgs7Mg0iIz/xpRvqyYFurCoWCeomzowVnpiEWiwXt7e3o6Ojwi6GRK3CXG0BMccjvPzY2RhMdveV5wJ4oZ8+ejfz8fL8T3RxhYGCASgYTEhLoKZoNJLLXvfsaRMaYnJyMoqIin+U8ENh3TxQKxQTmPo/HQ1NTE+Lj4yEQCAIm8WQxNjaG2tpaREdHQygUepy6Z+/7oFAoJvg+EO4FeT4rbWQhlUoRFxdn4w67YsUK/O///i9Wr16N9vZ2HDt2DL/4xS+8ahUNAI8//jief/55tLW1Ofx3pVKJ1NRU7N69G7/97W8BnCkqioqKcPToUZSXl3t1Pc4Q+E/9WQZvtuSBM4UGYeI7IwhOBW92BvR6PU6fPj0hXdBZN2B0dBT19fWIiopCWVmZV+097VurrOZ9ZGSEsontRwuEGwDAbTmVr8B2A1w9eTsyxSGbgyPHQPL7u9ruJIWnSqVCcXExJWYFEiTwaHR0FAKBwKYbYB9I1NTURC2F2dGKt7snhJDX19dHCXn+IC5O1T1pbm6GXq+nznp9fX1Tci98CaIyam5unhDL7Amc+T6Q4mBwcHCCaySr3CD3q8HBQchkMsycOZNyq3g8HkZGRqj9NAly8wWUSuWk3ZpTp07BaDTiF7/4BX2ssLAQmZmZwWKAy/CGWRAAGvxBZueTEQSnAtnEpwPSph8ZGbGxM3aWLmgwGNDU1ITh4WHk5eVh7ty5Pr9BOgpKIaMFwtom1yExMRHz5s0L+EnJm0oBtmVq7xioUChsAmnsiZns38ZqtWJgYACNjY1ITU1FRUWFz0+5rmB0dBR1dXU08Mj+ROkosc/eUtiRKdB0uCfj4+MQi8UICwsLuDcGYe4DQE9PD8LCwlBcXAyr1UrfA/bcC3IdfK3cIaMKpVLp0zGTo0hntnvAFogJCQnQ6XQYHx8Hn89HamoqLRCef/55dHd3Y3Bw0CfrJGhpacHOnTsnHREMDAzQjieLtLQ0DAwM+HR9LILFgAuwzycghjrTRWhoKFpbWzE0NDQpQdCV7zOdzgCRC46PjyMpKQkLFy60KQLs0wWJE1tiYmJAUuoIWNZ+XFwc9RpPT0+HTqdDZ2cnJBLJlJujr+BJN8AdTOV54CjKODY2Fv39/RgbG/N6ep6nIGOm3t5eLFiwwKXRGIEzS2F7UyDSWneVmMeSKb05+pouyPguLS0NBQUF9H7B6v5JkqC9pbS9csFbvw+xOY6Li0N5eblfC3BHmRNGo5H6EJD74ueff46XXnoJxcXF6OzsRFNTE6qrq7Fs2TKXfs69996LHTt2TPqchoYGFBYW0v/u7e3FRRddhKuuugobNmzw8Df0H4LFgJvwVmdgaGgIBoMBKpVq2hwET0cX9nLBWbNmQSaTOZULarVaNDY2YmxsDEVFRZg1a1bAdd4mkwktLS2U5GhvtepocyTSL3Zz8GZbNZC+AZN5HgwMDNC5ZWxsLEZHR6mVdSA8H4Az82WJROK1k7cjUyCWe0JMcVhLXcI9IX8jnU6Huro6aLVazpBOzWYzpFIpBgcHwefznZIpnSUJsomF7e3tMJlM1KjH3fESAfs+D3QQEwu5XE45MAsWLACPx0N3dzfa2tqwf/9+6hp67bXXoqKiApdddhl+97vfTfo9t2zZgvXr10/6HHbM0NfXh5UrV6KyshIvvfTSpK9LT0+nttfse21wcJB6N/gDwWLATUy3GGAtfKOiopCbmzvtObsnnQFHcsGenh4YDAYYjUaEhITYdAPIKSktLQ2VlZWcaSvX19cjOjra6UZivzmyJ0ei+WazBsiXp6Qne6VAoDcSHo+HqKgoKJVK6raYnJxsk1RINkd7YqYvT8KsqVF2djbmz5/vs583mayRba0T73u5XI4ZM2agvLycE2RKMqoIDw/3yHHRkXKHpHUqlUqb8RI7XpnsPWAwGCCRSKDRaDzyovAFLBYLlevy+Xy6kVosFnz55Zd44YUX8L//+7+4//77aQjZ0aNHIZPJpvzebPdpKvT29mLlypUoKSnBq6++OuX7uqSkBOHh4fjqq69w5ZVXAjhDeOzq6kJFRYVLP9MbCKoJXIDFYqGjgdraWsTGxiI3N9et72FPECwoKMAPP/yAjIwM2t7yFIODg2htbUVlZeWUz3UmF7RarZDL5Th9+jRlbJMTY29vL4xGI4qKijhhikN+h6GhIeTn57vVVnYErVZLNwaFQgGVSoXo6GibzXEqUhoXXQQBYGRkhKpC+Hy+w9Mf8Zsnv79SqYTZbKaeB95m7bOJfkKhMOAET9I9aWxshFKpRGRkJHQ6ndfyJqazLkLI8/WognTQ2C/yHmALhMjISMhkMmq3zOfzOXEw0Ol0qK2thdlsRnFxMTWAUqlUuP322/HVV1/hzTffxC9/+Uufdi96e3uxYsUKZGVl4bXXXrO5B5DipLe3FxdccAFef/11lJaWAgD++Mc/4tNPP8WuXbuQkJCATZs2AQCOHDnis7XaI/Bl71kGTzoDpBVqTxD01sjBVQdCVi5YVVU1QS6YkJCA5cuXQ6PRQC6Xo6enByqVCsAZp6/h4WEYjUafpPS5iqGhITQ0NCAhIcFrfAX7ubvRaKQn58HBQUpKcxZjzLVuAHDm5k6CfKaawzvym2c9Dwgpi0i6yHVw106XlTFyJdEPOPP5FIvFiIqKwtKlSxEVFeUwb4Itksl7wFfzceJnoFKp/OL74Gi8RLoHLDmV3LNmzZqF+fPnc+LvNzIyAolEgtTUVBQWFtI1NTQ0YO3atZgxYwZOnTpFFQm+xP79+9HS0kKNu1iQc7fRaIRUKoVGo6H/9tRTTyEkJARXXnmljemQPxHsDLgAtjPQ1NQEo9EIgUAw5evIPLurq8shQdDTLoM95HI5vv/+e6xcudLhvztKFwRgo8klngHAGUJQfX09QkJCwOfzERERYXNyJil9ycnJfkupMxgMaGxshEwmQ0FBAdLT0/02n7SPMZbL5ZSxHRISAqVSiYyMDBtCVyAhk8lQV1eH6OhoCAQCrwT5TOV54MwQh0Cv16O+vh7j4+MQCASc6DBZrVa0t7ejvb19SimcvaxRoVDYFEjelDXKZDKIxWIkJSVx5uSt1+tRW1sLrVaL1NRUSlK0WCwBc80knKeurq4J97V33nkHmzdvxsaNG7F9+3ZOXEOuI1gMuACr1QqDwQAAaGtrw9jYGBYtWjTpa4aGhug8WyAQOOQFkHSv6ZoFjY+P49tvv7XRqZJ1s+mChYWFiIyMdGoeRCxyWTKeo7YkOTXJ5XJ6c2Q3huTkZK+xlYkMTiqVIiUlBQUFBR7P870Fq9UKmUyGhoYGGI1GhIeHQ6vVuj1a8DZYVn5eXh7mzZvns59v73lADHEccS/IZ2HGjBkoLCzkxI1Zq9VCIpHAYDBAJBJ5NKpwVCARWSNbILnKO7BYLGhtbUV3d7fbqgpfYnR0FGKxGDNnzkRhYSH9fdigIHIfUKvViI6OnpBY6O3xhl6vh1gshsFgQHFxMb2/6nQ63H333Xj//ffxyiuv4De/+Q0nruHZgGAx4ALYYqCrqwvDw8MoKSlx+Fz2FD6Vg6BUKoXZbAafz5/W+jQaDWpqarBq1Sr6GJELarVaCAQCmi7I2niy5kFDQ0NobGxEbGwsioqK3GJ1228Mcrl8wsw5KSnJ7U2AXMuxsTEUFhZywo7WGTeAHS04KpCmOjlPF0qlEhKJBOHh4RAIBHRm6i/Yex4Q7gUJs0pPT0dWVpbfZJ2Tob+/H42NjRPkedOFfQdJqVRCp9PZ5A04U24QHoXZbIZIJPKqeZenYIsTV82WyOeAXIOxsTGvu0aSzklKSgqKiopocdLW1oZrr70WISEheOedd6bdcf25IVgMuAhiZtPX14fu7m6UlZXZ/Dth3Dc1NdGbzFQnWBK5WVxcPO21ffPNN7jwwgsBgMoF582bR+eybCFAOgE8Hg96vR5SqRSjo6NYsGABMjIypn2ztp85k5Yqq/WeTM5GZsvNzc1ITU1FQUEBJ06TLDdAIBBMyg1wdnK2L5Cm21JlY31zcnJs7FYDCblcDrFYjIiICCQnJ1NjGDbRz5thVK6AdTfk8/l+8VhwZKlNlBvkGqjVahs7aC6MmrRaLcRi8bSLE2fjlZiYGJv3gStFIjvWYQ9aVqsVn3zyCW6++WZcffXVeOqppwLGaTqbESwGXAQpBohWvaqqiv7b2NgY3ST4fL7Ltq4dHR2Qy+XTCsYAzrTtv/zyS5SUlEAqlYLH40EoFE5IF7Q3D+rr60NTUxNmzJjh8/Y7CSEhowU2Z4BwD+Li4qDVatHQ0ACNRoOioiJOWOR6QylAzGDY4sA+iMhdUt74+DiN0BUKhZyI9SWnya6uLuTn59uMKiwWC90YyJerJ+fpgkhpY2NjIRAIAjZqslduEF+PmJgYpKam2rD2A4WhoSHU1dV5vXNCwLpGki/A1lLYvpPIShmLi4vpWMdgMOChhx7Cq6++iueffx7XXHNNwDtPZyuCxYCLMBgMdFYsFouxfPlyG4Lg/PnzkZub69YHp7u7GwMDA1iyZMm01/b1118jJCQEeXl5NnJBe/Mg4ExLsqGhAWq1GkVFRS7rZ70JNsKYfJH1JiQkICcnBykpKQE/JbnTDXAXRqPR5vcnpDy2OHDEvbBYLOjs7ERbWxuysrJsomEDCVKckGLUldOkszAqe0MgT38/tnNiX5wEEkTBEBERgby8PFooEj8I1jXTV3N3exCdfl9fH4qKivxmeGOfWKpUKm0yJ8LDw9HX14ekpCQIBAJaJPT29mLdunUYGxvDu+++O+1x688dwWLARZBiYGxsDCdOnIBIJKIBPQKBwKNTWX9/Pzo6OqZlLEHkgnq9HiUlJZQb4IggaLFY0NXVhdbWVsyZMwd5eXmcMFUh/Aa9Xo9Zs2bBYDBQxr632+quIhC+ASTjni0Q7LkX4eHhlGsiEAg4YfbCXqvpFiesWx65BvYzZ1f5J2q1GhKJBBaLhTOdE/ZaOVMwGI1G+j4g18JqtU56cp4uNBoNxGIxrFYriouLA5rBAIA68nV1dUEul9PDzBtvvIHk5GSkp6dj586duPTSS/Hss89ygmNxtiNYDLgIo9EIi8UCuVyOb7/9lqoAphPQMzw8DKlUiqVLl7r9WnuiolQqRUlJCRISEhymC46NjaG+vh4WiwV8Pp8TWnj2hDtv3jybzgohpJGxAmmrx8bG2hQHU3nMewJfdgPcgT33YmRkBAaDAWFhYUhNTUVKSgqNcA3UaVer1aKurg46nQ5CodDr12oySR87d2evARmBSaVSWvQGusMEnBmV1dXVQaPRuHWt2DAe8l5go3w99X0gGBgYQENDA/V+4EKXyWg00rwUovZQqVR4+eWXsW/fPurBUFhYiIqKClRWVuLqq6/2O3H2p4RgMeAiDAYDOjo60NTUBLPZjPPOO2/a1bNMJkNtbS1WrFjh8mucyQWrq6ttNnnSDTCbzZQRzKXAFbY4cfWEy0q55HI5xsbGKBmL5R14+vuxpzb74iSQYDfcBQsWAIANY92ekObNEBpnYAOr0tLSsGDBAr91mcipkWWsk/FKXFwc5HI51Go1RCIRJ/wMgDPGOHV1dUhJSfGKvNLRNSDGWOz7YLK/CZt3wJXQKuDMvYF4sAgEAtoNHBoawg033ICuri7s2bMH8+bNw9GjR3H06FEcO3YM+/btCxYD00CwGHARx48fh1KpRFFREU6dOoWVK1dOm+RDRg4XXHCBS8+fTC544sQJqFQqJCYm0o3RZDJBKpUiIiICfD6fE600s9mM9vZ2dHZ2Trs4sSdjEd6BfQiRK5sUV7oBLFjHvvT0dIcbrr3PvqPRgrdbygaDAQ0NDVAoFDQaNpAg45W+vj709/fT8RgbxBMoUh7rl++qPM/Tn8PKGhUKBQwGA1XwsPbiPB4ParUatbW1CA0NhUgk8oox1XRhtVrR09ODpqamCSOUw4cPY/369SgrK8Mrr7zCic/nTw3BYsBFKBQKREREIDQ0FF988QWqqqqmXYWq1WocOnTIxh/AEdh0QSIXDAsLmxAzTNqpMpmMspSjo6ORlpaG5ORkJCYmBlSixzobesqzmAwsEYl86fX6SUOIuNoN0Ol0qK+vh0qlckuh4kzW6a3xyvDwMOrr65GUlISioiK/xtU6g8ViQUtLC3p6eqg8lvU8IKQ8YgrljpxtOlCr1RCLxQAAkUjk91Or/TUgssaoqCiMj48jLS3NRqcfSJhMJtTX10Mul0MkEtFQJYvFgp07d2Lbtm3Ytm0bbr/9dk50Nn+KCBYDLsJkMtFkwK+//holJSXTJm+x/gDO3uByuRx1dXUuywWJl358fDzmz58PrVZL5+5ardZmY0xOTvbLaYk44/X09PhdC+8shCg5ORnR0dEYHByE2Wz2ybzbExDHxcbGRq95LJCWMqtacDel0Gw206yDgoICn51w3YVKpYJYLAaPx5t0w2VNoQgpz1eeB2SE0tjYSMmnXNjA9Ho9JBIJFAoFlfGazWabe0JiYqLfOyjj4+Oora1FVFQUhEIh/flyuRw333wzfvjhB7z99ts2cu4gvI9gMeAi2GLg4MGDXvFXN5vN2L9/P84///wJJywSNNPb2zshXZB0AoAfuQGEUKhUKqlN3fyqAAAgAElEQVRbn/3N2t4hbnx8nG6M0yUhOYNMJkN9fT0iIyPB5/MDPtMjcr7Ozk7I5XIAsNkYk5OTfR7f6wyk/S6Xy31qiuNovMKG8JBNgRQhCoUCEokEkZGREAqFnGkpk0S/zMxM5ObmuvU3Y6OsSZFAPA8ctdVdBTE2kslkEAgEnPDJAH7ccMnfMCoqakIYkbMOSmxsrM8+D729vZBKpVSFQq71d999h7Vr16KgoABvvPFGwEdRPwcEiwEXYTabaTLgkSNHkJubO217XKvViv/+978TyIhELkgINLGxsU7lgmTO1tzcjFmzZmHBggUut27JaYl0DsbGxhAWFmazMXpKyDMajWhubsbAwIDPffLdgUqlQn19PeUGJCQkOJTzsRtjUlKSz1upxL8/OTnZ7+13dsTEstVJG12lUiErK8vtDddXIKFHKpUKAoGAtpSnC0dtdWKMRTbHyQpFUjTFxMQE1NiIBcs7sd9wHcHeTtjeEMi+UPQUZrMZjY2NGB4etiF6WiwW/Pvf/8bWrVtx7733YuvWrZwY2/0cECwGXARbDBw/fhxz5szBnDlzpv19v/zyS5SVlSE+Pt5hrgHwY7qgvVyQbGwGgwFFRUVe6VQ4IuSxmyIb3esMw8PDaGhoQGxsLPh8PmdOkq5wA5xtjPa8A2/ZnZI40+HhYRQWFvo1jXEyEMc+s9mMiIgIaDQam41xusoNTzE8PExZ+UVFRT7lwLDGWOR/7WOMSaHY0dGBtrY25ObmIisrixN/Q6PRSDtN7BzeHdgbArGyRmfSzqlAyIthYWEQiUT0szQ+Po4//elPOHDgAHbv3o3zzz/f79dx+/bteP/999HY2Ijo6GhUVlZix44dU4bJ7d27Fw888AA6OjqQn5+PHTt24OKLL/bTqr2DYDHgIthi4LvvvsOMGTOQlZU17e/7zTffYOHChVCr1ZBKpRPSBUkRANiaB7W3t6Ojo8OnpDdyI2C1/gaDgTLVyXiB3JANBgOkUilGRka8lnPgDdh3A9zlBhCXPNZK2RsRziMjI6ivr0dcXBz4fD4n/NRJ+53ksZN5t71jJGuE465ywxNwgbNgXygSpzzy2cvKykJ6enpAfR8IlEolxGIxYmJiIBQKvdppItbi5BrYx1mTLoKje1J/fz8aGhrofYsUk/X19VizZg3S0tLw9ttv0zhif+Oiiy7C1VdfjSVLlsBkMmHr1q2QSCS0U+sIR44cwXnnnYft27fj0ksvxe7du7Fjxw589913EAqFfv4NPEewGHARFosFRqMRAKgG1hupWNXV1QgNDYXJZLKRCzrrBhBGPo/HA5/P96sDnb2/vlwup0z1yMhIKJVKJCYmQiAQcGZj84VSgEQ4s90DovEmRdJkWn/CBxkYGOBUVK1Op6OmOFO1352dGOPi4qhyhagWpovx8XGIxWJ6kuRCpwk406WQSCSIj49HXFwclfaxozZCzvRXq5sEprW0tPitS2EfyqVUKm1kjeQadHZ2YnBwEEKhkHIArFYr3n77bdxxxx245ZZbsG3bNk6EkhEMDw9j1qxZqK6uxnnnnefwOatXr4ZarcYnn3xCHysvL8eiRYvwwgsv+Gup00bgNSVnIcLCwmiXwFMQuaBWq0VqaioWLlw4QS5ILDh5PB7NQejt7Q1YOh2Px0NMTAxiYmJo5T4+Po76+nooFApERkZCLpfjxIkTNp0DT07N0wXbDSgpKfGqUiAsLAwzZsywmXOyN8Ouri6YTCaHWn+iDomKikJFRQVnNjbiQjdr1iz6XpwMPB4P8fHxiI+Px7x58wDY5gx0dXWhrq5uwmghPj7e5fcCW8xxyTDLbDajubkZ/f391DuAwN5SurOzc4Kttq8Y+waDAfX19RgfH/f6e34yhISE0G5AVlYWdQ8l74W2tjao1WrweDykpKTgwIED9J53//3346OPPsJbb72FX/3qV5woilkQzsRkhfHRo0dx55132jy2atUqfPjhhz5dm7cRLAZcBPsmDQsLo10CT8DKBRMSEpCWlobQ0FAbzwC2GzA8PExnWOXl5QFn5AO2DnQzZ87EOeecg4iICJtT88DAAKRSqU34jq/Z+pNZHPsKjm6GrNa/qakJGo0G4eHhMBqNmD17NnJycjjRPbGP9Z0OKTYqKgpRUVH0e5hMJroxjoyMoKWlBQBcGi2QLoVWq/XrxjYViJQxJCQEZWVlE1xI2Q4RMLGb1traasPYn86YiYVCoUBtbS0SEhJQXl4e0NM1j8dDdHQ0oqOjERISgv7+fsyZMwdpaWkYGxvDZ599hk8//RQ6nQ6RkZG45pprYLVa6SmcK7BYLNi8eTOqqqombfcPDAxM+NykpaVhYGDA10v0KoLFgAcICwuDVqt1+3WO5IKnT5+mskX7boDBYKA3ai7N4EnMsEqlsmn5AY5PzexJqaOjg7L1SefAW7Nm4tBoMpkCuoHweDzExsYiNjYWc+bMofNbHo+HmTNnQq1W48iRIw4jnP359x0dHUVdXR3i4+NRUVHh9dNqWFgYUlJS6KnK3hSqr6/PRs5HvpRKJerr613uUvgDLCvfft49GRx101jPg8HBQTQ1NVHPA3INprISZtdFyItcSmVkExDZIjMlJQW/+c1v8Nlnn+H3v/89qqqqcOLECWzduhUNDQ04ePCgR1ktvsCtt94KiUSCQ4cOBXopfkHgP2VnITwZE7BywcrKSioXDA0NRX9/P3g8Hj0hAEBfXx+ampqQnJyMyspKzsiUiIwxPT0dIpFoyhOIo5MSIWHJ5XL09fXZuASSjdEdwlMgugGurovE59qPdlhC3vDwMJqbmydsCK4oNzwBMYHq7e31K2fB2WiBFAft7e1QqVQAQDdEVuIYKBiNRjoKW7hw4bRVO+Hh4Zg5cyb1IGA9DxQKBXp7e6HX621m7o4ULGzw0ZIlS5CQkDCtdXkLOp0OtbW1MJvNKC0tpfc0g8GABx54AK+//jpefPFFrF69GjweDxs3bgRwpmPKha4nANx222345JNPcPDgQcydO3fS56anp2NwcNDmscHBQb9FQHsLQQKhG9Dr9QDObNTd3d0oKyub8jVTyQXHx8cxODhIiTfkNGC1WpGTk4PMzExOVPpqtRr19fXQ6XTg8/leDYCxJyWq1WrExMTYsPWd2eey3QCuZAoAZ7gUEokEAFyKz7XfEHwV4Tw2NgaJRIKwsDAIhcKAR9USkO5JZGQk5s6dS8csrFOgr4skRyASy7i4OJvQHF/D3iBMpVLZ8C94PB5aW1uRkpICPp/Pie4JcEYhI5FIMGvWLBQUFNC/U3d3N9atWwe1Wo29e/eisLAwwCt1DKvVik2bNuGDDz7AgQMHkJ+fP+VrVq9eDY1Gg48//pg+VllZieLi4rOKQBgsBtyAwWCA1WrF0NAQmpubJ7XHJKdoR3JBR+ZBFosFHR0daG9vR1xcHEJDQzE2NkY7Bq6w1H0Bi8WCrq4utLa20jhYX994iEsga4Zk31KPiYlBV1cXJ7sBpEtBTF48+Xt5O8KZfX9lZ2dj/vz5nCDjsetyxH63L5KIvHWyvAlvrYvId7nQfif8C7lcjv7+fmi1Wpt7g7fMgDwF6YJ1dXWhsLCQjkSsViv279+PG2+8Eb/61a/wzDPPcOb07wi33HILdu/ejY8++sjGWyAxMZGSfa+99lrMmTMH27dvB3BGWrh8+XL8/e9/xyWXXII9e/bg0UcfDUoLf8ogxYBMJoNYLMby5csdPs9ZuqAzueD4+Djq6upgNpvB5/ORnJwM4McbIdkQ5HL5hHl7UlKSzzZBrpy62ZY6uRbkGmZkZCA9PR2JiYkB39zY5EOSI+FNeBrhrNFoIJFIYDKZIBQKOdNO1mq1kEgk9Hq5ui5neRPeIuSx6xKJRF4P1PIUOp0OYrGYXq+QkJAJ5ljeCqRyB3q9HmKxGAaDAcXFxTQd1WQy4dFHH8UzzzyDf/7zn7j++us50eWcDM7W9+qrr2L9+vUAgBUrVmD+/PnYtWsX/fe9e/fi/vvvp8XjY489FjQd+imDFAPOooenShe07waYzWZaTWdlZSE7O3vSjd1+3s6m8pHNIDk5edqnA/ZUlJmZiZycHE6dultbW5GWlob4+Hi6ORIpH0tK9NcpifXJJ0Y9/rheU0U4JyYmQqPRoKWlBRkZGcjPz+fE35ENYyLRzNNZl30Ikb3vw2QmOPYg3J60tDSbNnegQZwXSZfR0bpYMyA2kMqemOjNopkcjIgjJOkaDg4O4vrrr0dvby/effddLFq0yGs/MwjfIFgMuAGj0QiLxQKNRoOamhpceOGFtJJ0li5IOgH2ckES4BMREYGioiKPTx9sKiExASLEI7IxuiNhI0xuANS7nwuYrEvBSvn8ndCo1WptukDe8sn3BCxbf3R0FKOjo7BYLIiJicHMmTN91lJ3B8QilwT5+CKAhnBx2C4K4V+wGyN7HcxmM6RSKQYHB6ctsfQm2HjmoqIiG0+DqWA2m238L9iiebo8FKvVivb2drS3t1MuFMlKOXToEK677jpUVVXh5Zdf9qsxGsHBgwfx+OOP49SpU+jv78cHH3yAyy67zOnzDxw4gJUrV054vL+//6wjAnoKbrBOzjKQ0z7Z5B2lC5IiwF4u6O0AH6LnJTM6vV5vI+OzTyYk0b32P5PtUnBtpjyVUsBeygfYErA6OjogFotpK5nlHXh67VmpWXp6OhYtWhRwEhdh65M2empqKrKzs2mB0NbWNqGlnpyc7Df7XELGi42N9YmUkYD1fcjMzKT8C/J+sL8OUVFRGBgYQEREBMrLyzljBKXVaiEWi2E2m1FWVub2rJ319wB+LJpJkdTS0kLJumyRNNWIxWAwQCKRTFAxWCwWPPXUU/j73/+ORx99FJs2bQrYPUStVmPhwoW4/vrrccUVV7j8OqlUanMA4pLvga8R7Ay4AdIZsFgs+OKLLyAUCtHc3OxyuuDQ0BAaGxsRHx+PoqIiv9x07JMJlUolwsPDkZycTDdFcloLDw8Hn8+nM79Aw5ucBW8mNOp0Opqax+fzORNTazKZIJVKMTQ0NMEZj4BtqRPeAbtp+KKVbLFY0Nraiq6uLk6Q8YAfSapdXV2QyWTg8XgOr0OgxgRkXOGNMcpkYN8P5P5AiilH6g1ibpSYmAg+n09HcTKZDDfddBMkEgn27NmDiooKn6zXE/B4PJc7A3K5nDOKJH8j2BlwA+QGZjAYAACNjY0oLCykp1G2G8COBHQ6HRobG6FQKFBQUODXZDp7TTNLxhscHIRUKoXVakVsbCxSU1NhMpno+gMFX/gGOLoOZN4uk8nQ1tZG5+0s74D9ueysOzU1FRUVFZzxUSen7piYGFRUVDgdDTnSuDszhfIGS12tVkMikcBisaCsrIwzhSZR+2g0Gpx77rlITEycYCntC2nnVGCtjv0xrnD0fmBHLD09PVS9ERISAqVSiezsbJso5FOnTmHNmjUQCAQ4deoUZ4pjT7Bo0SLo9XoIhUL85S9/mVQx9lNDsDPgBoxGIzo7OyGVSmGxWHDOOedQpYCzbkBPTw9aWlqQmpqKBQsW+DWnfjKMjo6ivr4eUVFRyMzMtJGxmc1mmxOzP3XdpBtAlBX+qtKnSmiMi4vD4OAglEolioqKODVT9uap21mEMwkgcmaA4+j7kDHKnDlzkJ+fz4mxE3DmFCuRSCacblnY2wgTaWdMTIxNceDNEYtaraZOlSKRiDMeEETtpNFoEBkZCY1Gg4cffhgzZsxASkoKPvroI2zduhVbt27lDOGShSudAalUigMHDuDcc8+FXq/Hyy+/jDfeeAPffvstFi9e7MfVBg7BYsAN1NfXo7u7GwKBAA0NDeDz+UhJSaHcAVIEALYmPUVFRZyplo1GI5qamjA0NIT8/PwJ7nNkM2BJiWRTZDcDb5+I2W4AFxQM7GbQ398PmUwGAIiJiUFKSoqNdCtQIMZGhLTqq1O3swhntmBk58wkMEepVEIoFHrVoGo6YLXwnjgvktECy9b31oiFRPtyrXBSKpWora21MV0ymUz44IMP8Nprr9FxGQCUlZWhqqoKmzdvDiiR1h6uFAOOsHz5cmRmZuKNN97w0cq4heCYwA1kZ2cjKysLYWFhaGpqgl6vh9lsBuDYPGju3Lk455xzAk4sIxgaGkJDQwP1ond0uuPxeIiLi0NcXBzmzZtnY34jl8tp6A57UpwuU5/tBnAllIbH4yE8PBwymQxjY2MQCoVISUmhmyJJ5YuMjLQhJfojoZFN85uOsZGrcBRARNrIQ0NDaGpqolK+iIgIDA0NITk5GRUVFZzphLFkvNLSUo8Kp/DwcKSmplIFhLMRi31C4WTXwGw2o7GxEcPDwxCJRD5RV3gC0tVsampCTk4OJUYDZ8ajf/vb35CRkYHTp09j1qxZqK+vx5EjR3D48GHOjM6mi9LS0p9NLgEQ7Ay4BbPZTEmEYrEYg4ODNifmkJAQNDU1AQD4fH5AJDWOwAYeFRQUYPbs2dPasIhigT0pEsUCuRaumJ1wrRvAgoT4xMXFgc/nOyyc2E1RLpdDqVT6nIxHpIw6nQ5CoZAThZPFYoFSqURLSwsUCgVCQ0NhsVhseAe+6Ca5iv7+fjQ2NmL27Nk+9VqwT6tUKpUTXCMTExPpaEGlUqG2thbh4eEQiUScSLEEzryv6+vrIZfLUVxcTE3QrFYr3nzzTdx1113YtGkTHn74Yc4cdCaDp52BX/7yl4iPj8f777/vo5VxC8FiwA2cOHHCxu2OyJVGR0cxMjICk8mEyMhIzJo1i7aSA3kyIoQ3qVSK5ORkaonsbbDtU8JQZ+2D7dvIQOC4AVPBZDJRApe7rWRCvmJ5B95KaGQjo9PS0rBgwQLO3IjZWF+Sd0BGLORaaDQauimy/he+7KIQdcXw8DD4fH5AZGIGg8HGDImoeSIjI6FSqZCeno7CwkLO/C3Hx8dRW1uLqKgoiEQiev/SaDS466678PHHH+O1117DJZdcEnBFyGRQqVQ0Mvucc87Bk08+iZUrVyIlJQWZmZn485//jN7eXrz++usAgKeffhrZ2dkQCATQ6XR4+eWXsXPnTnzxxRcTzOV+qggWA27gwgsvxJdffgmBQIDKykosXboU4+PjePTRR7Fjxw6sWLECer2e3gBVKhViY2NtTsz+qv5JQNLY2BgKCwv9SngjigV2UyQn5sTEROh0OvT29tIWN1e6AcQ4KioqCgKBYNp8gMkcI9l5+1QFo8FgQENDAxQKBfh8PqdaycR5capxBdkU2Xk7G7xDpJ3e2mDGxsZo8JFQKOTMqVuv10MikUCpVCIuLg4ajWbCaCFQXZTe3l5IpVL6tyR/i+bmZqxduxYxMTHYs2cP5s+f7/e1uQtnJkLr1q3Drl27sH79enR0dODAgQMAgMceewwvvfQSent7ERMTg+LiYjz44IMOv8dPFcFiwA2Q09nBgwfx3//+Fx988AE0Gg0WL16MwsJCLFu2DEuXLsXcuXPB4/HoDZDM2+3b6cnJyV4/HREWd3NzM1JTU1FQUBDwGR6bztjb2wuTyWRjF+tvxYI9SKRvT08P8vLyfJoU6W5C48jICOrq6pCUlISioiLOzOBJfK5arYZQKKStZFfBSlzJF4AJwTvuviesViu6urrQ0tIyYdYdaIyNjaG2thbR0dEQCoU0uIwdLdh3UfyRMWA2m9HQ0ICRkRGIRCJK+LRarfjggw9w6623Yt26dXjiiSc48/4LwvsIFgMe4J133sGtt96KZcuW4eGHH0ZLSwuqq6tx6NAhfP/995g3bx6qqqpQVVWFpUuXIjs7GyEhITbGN6SdzhLQpusGp9Fo0NDQALVazSkzHHtuQHZ29oQ2sj8UC46gVCpRV1eH0NBQCIVCvyeqOUtoTExMhMFgwPj4OAoKCpCRkcGZTY345M+YMQOFhYVe+TtNJe10RefPFigikYgzoyeWjJednY3s7OwpHf7suygkkIp8Ed3/dKFWq/HDDz9M4C3o9Xrcf//9eOutt/DSSy/hqquu8vv7z11LYeBMR+DOO+9EXV0d5s2bh/vvv58GDAUxOYLFgAd47bXXEB8fP8HmkoQYHTp0iBYHJ0+eRGpqKi0OqqqqUFhYiJCQEJt2OiGgEVc8Uhy40jol7dqWlhZKkuLKDJLlBggEAoekSlbGR64Fmy1ACgRv8h2IzKyzsxM5OTnIysrihJzLbDajr6+PzjuJZNX+xByItZrNZjQ1NWFgYMCpw6G3wFoIkwKB1fnbE1VJByU5ORlFRUUB74YRGI1GKrMUiURud1AAx4FU9gRNT4yhiJyRGHuR91RXVxeuvfZa6PV6vPvuuzZRvv7EZ599hsOHD6OkpARXXHHFlMVAe3s7hEIhbr75Ztx444346quvsHnzZuzbtw+rVq3y48rPTgSLAR+CtACPHj2K6upqHDx4EMePH0dcXBzlHCxduhRCoZAysElmObkBko2AFAf2JwKVSoX6+noYDAbqe8AFTFcpwHIv5HI5VCqVzUYwnRELMVGxWq0QCoWciahlC5Tc3FxkZWU5PDGzYTNkxOLrzY/M4CMiIiAUCgPir2Cv8ydkvLCwMGi1WpqpwRUOikKhgFgsttHoewOTGUOxRaOzzwdb1AmFQspBsVqt+O9//4sNGzbg8ssvx7/+9S/OGB+5ogi45557sG/fPkgkEvrY1VdfDYVCgc8//9wfyzyrESwG/Ahy2jl+/DhqampQXV2NY8eOITQ0FJWVlXSssGjRIoSHh09gp8vlclitVvph1+l06OvrQ2Zmplcse70FV7oB7sJZO531OphK488WKP7Q57sD4j43VYHiLKHRm74P9j+PeBpwKcAKOFPU/fDDDzCbzYiNjcX4+LhNhPN01BvTAXvNfM1BIWADyojclyVoEhdNnU6H2tpa8Hg8FBcX06LOZDJh27ZteP7557Fz506sW7eOM2MpwLVi4LzzzsPixYvx9NNP08deffVVbN68GUql0h/LPKsRLAYCDIPBgO+++w7V1dWoqanBkSNHYDQaqZvX0qVLUVJSQm/uRDJDTohs54B86ANVFPjTN2AyxQK5FmwXRa1Wo66uDkajkUZMcwHsiGfu3LnIy8tze7NlE/lY3wf2WnjCRdHpdJBIJNDpdBCJRJy6ZsQ7gHXss3fPJOoNeytlX0Y4GwwG1NXVQaVSobi4OGDXzJ6gqVQqqVNqfHw8MjIyEBsbi5SUFAwMDGD9+vUYHBzE3r17UVxcHJA1TwZXioEFCxbguuuuw5///Gf62KeffopLLrkEGo2GM2mUXEWwGOAYzGYzfvjhBxw8eBAHDx7EoUOHMD4+jiVLlqCsrAydnZ345JNP8Mknn2DJkiU2mQJyuRx6vT4gRDxfdAPcAesGR64HOSWGhIRAJpMhIyPDpwlw7kKn01HPd4FA4LURj6NkQncTGklq3qxZs1BQUMAZDorJZEJDQwNkMhkEAsGUJFm2UCLjJl9FOLuSeRAIWCwWNDU1oa+vD+np6bBYLPj000/xyCOPICsrCyqVCrm5uXj55ZchEAgCvVyHCBYDvkewGOA4LBYLGhoasGvXLrz00ksIDQ1FXFwcMjIyaOegoqKCtpVZ62CWiMd6HXhTHsRVF0Gr1YrR0VE0NjZCr9dTwiZpIftr1u4MAwMDaGho8Mtm64iA5iyh0WQyobGxESMjI5wKZALOKD/EYjFiYmIgEAg8OuE7iuydrmuk1WpFe3s72tvbsWDBAiot5gJYG+aFCxdSDoDZbMa2bduwb98+pKamYnx8HN9//z0yMjJw7bXXYtu2bQFeuS2CYwLfgxvlfhBOERISgvfeew/PPfccHnzwQdxxxx3o7OyknYMtW7agq6sLxcXFtDiorKwEn88Hj8ezYWS3tLRQe1TW68DTtinbDSAxsFwAm5jH5sFrtVraNWhsbLQplFw1AJoujEYjtYb2R0QtAISGhtK/NfCjjI+8L0hMbUxMDPR6PaKiolBSUsIZYqXVakVHRwfa2toosdLTzdbbEc7EREin06G0tJQz1wz4UQJKCk5SpI+OjmLjxo1obGzEnj17UFZWBuDM5/n48ePQ6/WBXLbHqKiowKeffmrz2P79+1FRURGgFZ1dCHYGzgJ88cUXyMrKcijxISYrhHNw8OBBNDc3U5dEUiCkpaW5bIQ0VTuNq90A4EfnxfHx8Sm9Fuyla8Qx0l665i2QvIP4+Hjw+Xyfzq7dgdlsRnNzM3p6ehAfHw+TyUSNb+zNkPwNMkrRarV+4S0QgibLO3AW4Tw6OgqJRIKUlBQUFRVxZpRCYq27u7tRVFRkIwE9fvw41q1bh+LiYuzatYsziZKO4K6lMJEW3nrrrbj++uvx9ddf409/+lNQWugigsXATwwkj+DgwYPU60AikSAvL4/6HCxbtoy2Mh3lCkRGRtqcltmZqkqlgkQigcViCQg3wBnI793Y2IiZM2d6ZIbDmr2QQskbqYTE4bC3t9ej6FxfQqPRQCKRwGQyQSQS0ZMtWzQSUqK/ExrJyZb8PQO12bJMffK+IFLgtLQ0zJ8/36tWytNdq1gshsFgQHFxMU1ntFgseOGFF/DQQw/hgQcewN13380ZVYgzuGspTF5zxx13oL6+HnPnzsUDDzwQNB1yEcFi4CcOq9UKmUxmUxzYuyRWVVVRmZ3ZbLa58bFGSBaLBaOjo5yTMhLvfrlc7tU5t7NUQrZQmoqINzY2BolEgrCwMBriwwWwjPyMjIwp0/z8mdBIOhX9/f0+NzdyF0Sap9frMXPmTCrzZO21ybXw9+dDJpNBLBZjxowZKCoqoj9/bGwMt9xyC44dO4bdu3dj+fLlnChcguAWgsXAzwysS+LBgwdRU1NDXRKJERLrkmixWHDixAmo1Wr6+pCQEJsN0VvWqJ5gaGgIDQ0NlMHty5k/awrFEvHY0zLZBCwWCzo6OtDe3s45fb7RaKTFk6fBR75KaGQTEEUiEWeKJ8D5DJ5cC5agaTQa/RbhzFsSRMMAACAASURBVBIYCwoKbDpPYrEYa9aswbx587B7926kp6f7ZA1BnP0IFgM/c9i7JNbU1OD48eOIjY1FeXk5QkND8dlnn+Hpp5/GmjVrwOPx6CbASvhYZ0BvnRAng9FopPG0hYWFSE9P9/tph3UHJNfCZDIhLi6OkrA8taD1FYj8zdu8hekmNLKkT3t73EDDYrGgubkZvb29E2bwjmBvr+3LCGeDwQCJRAKNRoOFCxfSMY/VasUbb7yBu+66C3fccQceeuihgI1Znn32WTz++OMYGBjAwoULsXPnTpSWljp87q5du3DdddfZPBYZGQmdTuePpf6sESwGgrCB1WqFXq/Hnj17cN9990GlUmHWrFkYHh6mhMSqqiqcc845CA8Pd7ohkhOiLxIJCREvLi4OfD6fM/G0FouFntCio6NhsVhsTG98Ie10Z22EVJafn+8X+ZuzhEZ7gqbJZEJ9fT0UCgWEQiGnSG0ajYY6QxYXF3vcqZgqwpmYZLnzN5HL5RCLxRN8DdRqNe6880589tlneOONN3DRRRcFbCzwzjvv4Nprr8ULL7yAsrIyPP3009i7dy+kUilmzZo14fm7du3C7bffDqlUSh/j8Xickrj+VBEsBoKYgPfeew9r167F7bffjoceegghISH47rvvqJyRuCSWlpbSscK5555LT5mEjU2+2ERCsgl4ckoxmUx0lsw1Ip5er0d9fT3Gx8chEAjohmZvCkWknfYZC74EsToGAKFQSEll/oYjS+mwsDCYzWZER0ejsLAQycnJnPmbEi+I2bNnY8GCBV7tVEwnwpm1O87Pz8e8efPoNZNKpVi7di0SEhKwZ88eZGZmem3NnqCsrAxLlizBM888A+BMUTpv3jxs2rQJ995774Tn79q1C5s3b6bXIwj/IVgMBDEB/f396O7udtrKm8wlkUgZS0tL6SnKG0ZIcrkcdXV1iIyMhEAg4NQseWhoCPX19VRiNtls2BlL35l6YzpgW++eWh37CqRT0dnZiZSUFFitViiVSvB4vAm8A3+v2Ww2QyqVYnBwEAKBwOEJ1ttwFuFsn9zJ4/EgkUgm2B1brVa899572LRpE66//nrs2LEjIB0oFsS74v/9v/9nYxa0bt06KBQKfPTRRxNes2vXLtx4442YM2cOLBYLFi9ejEcffZSzzog/JQSLgSCmDYvFgsbGRhw4cAA1NTWoqanB0NAQFi9ejMrKSixbtgzl5eVISEiYYIRETsskcc3eCMlsNtP2tr9CX1yFyWSCVCrF0NCQx6x3wtIn14K1DmYzFtz9nQ0GA+rr6zE2NmbTqeACtFotJBIJjEajjZzRYrEEPKFRrVajtrYWoaGhEIlEAbOwdRbhzOPxEBERgfnz50OtVqOgoABGoxF//vOf8c477+Dll1/GFVdcwYnPSF9fH+bMmYMjR47YGP/cfffdqK6uxrfffjvhNUePHkVzczOKi4uhVCrxxBNP4ODBg6irq8PcuXP9ufyfHYLFQBBeB4niJbHNhw4dQkdHB4qLi+lYoaqqCikpKdQIiW2lj4+PIyYmBrGxsVAqlYiIiIBIJApYe9sR5HI5JBIJtcb1VqvfYrHYSPhIjDXLwZiKoDkyMoK6ujokJSWhqKgo4CdEFiTzIC0tzYaR7whsQiO5Hs4MgLyBvr4+NDY2co7ASMKsiKNmREQEent7cfnll9ORk8FgwM6dO/HrX/+aM+ZHnhQD9jAajSgqKsLvf/97PPLII75c7s8ewWIgCJ+DuCSSsUJNTQ2amprA5/NpYcC6JKpUKnzzzTeIiopCZGQkDAaDz1rp7oIl4uXl5dnMa30Bq9VKZWuke+AoY4HM3pubm9HX14eCggJkZGRw4oQI2Lbep2PD7IuERjaPQSgUThl+5E+w5EpWmWK1WvHhhx9i27ZtmDFjBuLj43Hs2DEYjUaUl5fjP//5T8BHaZ6MCRzhqquuQlhYGN5++21fLTUIBIuBIAIA1iWRFAfEJVEoFOL7779HVFQUvvzySyQlJTltpbMWyr52wwOA8fFxSCQS8Hi8gBHx7O1ySVJlTEwMDAYDwsLCOBU3DJy5bmKxGOHh4RAKhV5tvU+V0GgfZe1sbRERERAKhZxRpgBn1lZbW4uoqCiIRCLa4TEajXj44Yfx0ksv4dlnn8XatWvB4/FgsVhQX1+PkydPcsZ1r6ysDKWlpdi5cyeAM8V0ZmYmbrvtNocEQnuQFNSLL74YTz75pK+X+7NGsBgA0NHRgUceeQRff/01BgYGkJGRgTVr1uC+++6btMWq0+mwZcsW7NmzB3q9HqtWrcJzzz0XlMG4CavViuHhYXotCwsL0dTUhIyMDBsjJNYlkZj/EDc84gBHioOpnAHdXR9hb2dlZdF1cAFWqxVtbW1ob29HXFwczGbzhFwBfygWnK2tp6cHTU1NmD9/PrKzs31+3dgxy2QJjSEhIejt7YVUKsX8+fORk5PDmS6K1WpFX18fpFIpfb+RtfX392P9+vUYHR3Fu+++C6FQGODVTo533nkH69atw4svvojS0lI8/fTTePfdd9HY2Ii0tDRce+21mDNnDrZv3w4AePjhh1FeXo68vDwoFAo8/vjj+PDDD3Hq1Cnw+fwA/zY/bXBjuBRgNDY2wmKx4MUXX0ReXh4kEgk2bNgAtVqNJ554wunr7rjjDuzbtw979+5FYmIibrvtNlxxxRU4fPiwH1f/08A111yD7u5uHDp0CKWlpRgbG8Phw4dRXV2NN998E5s3b8bMmTNtwpcKCwuRk5Nj44Ynk8nQ1tbmNSMkrVaLuro66HQ6lJSUICkpyQe/vWfQ6/Woq6uDWq1GSUkJbSGzioXOzk5IJJJpt9LdBUtgXLx4sd+Ml4g75lQJjWSskp2d7fNRjzswm81oaGjAyMgIFi5cSImfVqsV1dXVuO6663DBBRfg008/5VRCojOsXr0aw8PDePDBBzEwMIBFixbh888/pwemrq4um8+lXC7Hhg0bMDAwgOTkZJSUlODIkSPBQsAPCHYGnODxxx/H888/j7a2Nof/rlQqkZqait27d+O3v/0tgDNFRVFREY4ePYry8nJ/LvesR3V1NZYsWeJwzkla48eOHaOkROKSWFFRgaVLl2Lp0qUQiUQIDQ2dYIRE5uysE95URkjEu18qlSItLQ0LFizgDDEL+FHOOHPmTBQUFEzKsDeZTBPyJsLDwyd0Ury1IRKXQ3szHC5AoVCgtrYW4eHhiIuLw9jYGGcSGlUqFV2bSCSi3Ryz2YzHH38c//jHP/D444/j5ptv5kxnKoifDoLFgBPcf//9+Pzzz3Hy5EmH//7111/jggsugFwutzktZmVlYfPmzbjjjjv8tdSfHYhL4vHjx1FTU4Pq6mocO3YMISEhtDiwd0lkrXKJERJLwmONkEjwkUKh8Ni731dgiXieyhnZMQspEng8nk2x5EknhahIurq6OGcKRUisLS0tyMnJwfz58+naJktoJNfD15yU/v5+NDQ0TFAyjIyM4MYbb0Rrayv27NmDJUuW+GwNQfy8ESwGHKClpQUlJSV44oknsGHDBofP2b17N6677jrqQU9QWlqKlStXYseOHf5YahD/PwwGA3VJrKmpweHDh2EwGFBWVkbHCqxLIusdL5fLodPpEB8fj8jISFrgCQQCTsnylEolJBIJJbt56/Rqr+9nFQvsaXmyTopWq4VYLIbZbOacDNRoNKKurg7j4+MQiURTjnr8ndBIijuhUGhTeB47dgzr1q3D4sWLsWvXroBmXLiTLwAAe/fuxQMPPICOjg7k5+djx44duPjii/244iDcxU+6GLj33nun3JQbGhpQWFhI/7u3txfLly/HihUr8PLLLzt9XbAY4DbMZjNqa2tp+FJNTQ11SSSkxLKyMjo7Hx4exsmTJxEeHo6IiAiHmQLeCvVxF1arFR0dHWhra5twqvXVz3MUOsSa/7ApfKxt71RRyP6GQqGAWCxGfHw8BAKBRyOLyRIa7eWd7kCj0aC2thY8Hg/FxcW0uLNYLHj22Wfx8MMP4y9/+Qu2bNkS0LGAu/kCR44cwXnnnYft27fj0ksvxe7du7Fjxw589913nCc8/pzxky4GhoeHMTo6OulzcnJy6Omvr68PK1asQHl5OXbt2jXpBzA4Jji7QFwSCeeAuCSec845KCwsxP79+yEQCPD2229TmR4bvkSMkNjiwB9zZeLWZzAYIBQKAyYZ1Gq1Np0DMmcnIxsSncsVsAWUvX+/N773dBIagR/NlzIyMpCfn0/vNQqFArfccgtOnjyJ3bt347zzzvPKmqcDd/MFVq9eDbVajU8++YQ+Vl5ejkWLFuGFF17w27qDcA8/6WLAHfT29mLlypUoKSnBm2++OeXphhAI3377bVx55ZUAzoSEFBYWukQg/Nvf/oZ9+/bh+++/R0REhEvBHOvXr8drr71m89iqVavw+eefT/naIGxhsVgglUpxzz334LPPPoNAIIBEIoFIJKKcg8rKSsyYMQM8Hs9hyA4xQvIVQ5+cuLlIYBwdHaWeC2FhYVCr1YiOjraRM0ZHRweEM0BUFhqNxm+eC2wglUKhgEqlcpjQaLVaqTGUvfnSDz/8gDVr1iAnJwdvvfWWXzIRpoInxkGZmZm48847sXnzZvrYQw89hA8//BA//PCDX9YdhPvgzt0lgOjt7cWKFSuQlZWFJ554AsPDw/Tf0tPT6XMuuOACvP766ygtLUViYiJuuOEG3HnnnUhJSUFCQgI2bdqEiooKl5QEBoMBV111FSoqKvDvf//b5bVedNFFePXVV+l/B6p1fbbDYDBg3bp10Gq1OHnyJIqLi9Hd3U3HCn/5y1+oSyLrdZCfnw8ej2djhNTX14eGhgaEh4d7xQiJdcTzV1COq2CJeNnZ2cjOzqbF0mTXIykpyauKBWeQyWQQi8VITk5GeXm53wqoqKgozJ49mxI6SfGoUCjQ09OD+vp6SmYNCQmBUChESkoKgDOF6WuvvYZ77rkHW7ZswYMPPsiZUcvIyAjMZvME75S0tDQ0NjY6fM3AwIDD5w8MDPhsnUFMH8FiAMD+/fvR0tKClpaWCWEYpHFiNBohlUqh0Wjovz311FMICQnBlVdeaWM65Ar++te/AjiT0uUOIiMjaYEShOeIiorCvffei4svvphKuDIzM7F27VqsXbt2gkviP/7xD1x33XXIzc2lXgfLli1Dbm4ueDyeDUN/aGgITU1NlHRGNkRXAocUCgX1BSgvL+eUI569rwE7HgsPD8fMmTOplS8b0Ts0NITm5maqWCDFgbdIeAD3lAzh4eFITU2lhMDBwUHU1dUhJiYG4eHhOHz4MDZu3AihUIjw8HBIJBK8/fbbuPTSSzmjwAji54XgmCDAcCe/e/369fjwww8RERGB5ORknH/++dSbPAjfwmq1QiaTUSnjoUOHcPr0acydO5fmK1RVVVFZGEs6I+1jAE4DhywWC9rb29HR0cG5dEbgx7FAcnLylDHNjuCMhOeO94Mz6HQ6iMXiCSmIXACbZVFUVGTTOfjwww/xwgsvoLe3FzqdDkqlEqWlpVi6dCkeeOCBgGcLAMExwc8JwWIgwHCnGNizZw9iYmKQnZ2N1tZWbN26FXFxcTh69Chn2oo/F1itVuqSSAiJJ0+exIwZM+hYgbgkhoSEOA0cSkpKQmxsLGQyGaxWK4qLizm3mbW0tKCnp8er4UeEhMeSEg0GAxISEmzkjFMVHcPDw6irq0NqaioKCws59Tlgi5Ti4mIqt7Rardi7dy/+9Kc/YePGjdi+fTvCwsLQ0tKCmpoanDhxAs8++yxnjIXczRdYvXo1NBoNPv74Y/pYZWUliouLgwRCDiNYDHgRnkgZ3SkG7NHW1obc3Fx8+eWXuOCCC9x+fRDegzOXxJiYGJviQCgUIiwsjBYHYrEYWq2WdhPstf2BJA2q1WqIxWIAgEgkQmxsrM9+ltVqpSQ8UiBoNBqbuOLk5GTKkWGLlMLCQmRkZPhsbZ6AdFJmzJiBoqIiWqTodDrcc889eO+99/Dvf/8bl112Gac6QI7gbr7AkSNHsHz5cvz973/HJZdcgj179uDRRx8NSgs5jmAx4EW4K2UEplcMAEBqaiq2bduGm266yaPXB+EbEMndiRMnKO/g6NGj1CVx8eLFOHjwILq6ulBdXY3U1FQq3yObITFCYjdDf1j7EivmxsZGzJkzx0b65k/o9XqbTopKpUJ0dDQSEhIwNjYGHo+HhQsXcsrgiARHdXR0ULkl2ezb29tpwuA777yDvLy8AK/WdTzzzDPUdGjRokX417/+hbKyMgDAihUrMH/+fBv+0969e3H//fdT06HHHnssaDrEcQSLgQBjOsVAT08PMjMz8eGHH+LXv/71pM/1RMpotVrx0EMP4f/+7/+gUChQVVWF559/Hvn5+W6vNYgz89fTp0/jlVdeweuvv44ZM2bAaDRCIBBQtcKSJUsQGRkJHo834aSsVqt9boRkMpnQ0NCA0dFRCIVCSgjkAoxGIzo6OtDZ2Ynw8HAYjUZERETYkDT9EWXtDAaDgXZ6Fi5cSMc9VqsV+/btw0033YTVq1fj6aef5hQxNIgggKCaIGDo6uqCTCZDV1cXzGYzvv/+ewBAXl4ePekUFhZi+/btuPzyy6FSqfDXv/4VV155JdLT09Ha2oq7774beXl5WLVq1ZQ/zxMp42OPPYZ//etfeO2115CdnY0HHngAq1atQn19ffBm5gEiIiLw8ccf46233sJTTz2FG2+8EWKxmHYOXnzxRSiVSixZsoRaKJeVlSE9PR08Hs/mpNzW1ka17KyccTp/F6VSCbFYjOjoaFRUVHBKtmo2m9Ha2or+/n6IRCKkpaVRxYIjBQcpEOLj4/3S1ZDL5RCLxUhKSsLChQvpeMdoNOKhhx7CK6+8gueeew5/+MMfOD8WCOLniWBnIEBwZCAEAN988w1WrFgBAODxeHj11Vexfv16aLVaXHbZZTh9+jQUCgUyMjJw4YUX4pFHHpmg6Z0MrnYirFYrMjIysGXLFtx1110AzmwWaWlp2LVrF66++mrXf9kgKIhPBcsbIWBdEomF8sDAABYvXozKykosW7YMFRUVSEhImGCEJJfLacAOWxy4YvzDuvXl5uYiKyuLUxsW4S7weDyIRCKnLHtHCg6r1TrBNtibJEOr1YrOzk60trZOcDrs6+ujrPu9e/dyKoZXJpNh06ZN+Pjjj6k8+p///OekI5cVK1agurra5rGbbropSAr8iSBYDPzM4GoxQDaG06dPY9GiRfTx5cuXY9GiRfjnP//p66X+7EHkhgcOHKDFQUdHB4qLi2nngHVJZI2QSMDOVG10nU6Huro6aLVav7n1uQOS5ucJd4FEWbMFk9FodFux4AxGoxESiQQqlQrFxcX02lmtVnzzzTe4/vrrsWrVKjz//POc4jUAwP/8z/+gv78fL774IoxGI6677josWbIEu3fvdvqaFStWYMGCBXj44YfpYzExMUhISPDHkoPwMYJjgiAcgriFBZ3EAoeQkBDk5uYiNzcXN9xwA6xWK7q7u+lY4a9//SukUimKioqoz8HSpUttjJBY4x/SRicbIXCm6EtNTbVpbXMBZrMZjY2NGB4ehkgk8ihGmsfjIT4+HvHx8Zg3bx6sVqtNWqVUKoVWq6WZAu7wMJRKJWpraxEXF4fy8nJaUJjNZuzYsQNPP/00/vGPf2DDhg2ckQgSNDQ04PPPP8eJEydw7rnnAgB27tyJiy++GE888cSkyoyYmJig6dlPFNz59AfhNjyRMgZx9oLH4yEzMxNr1qzBmjVrYLVaMTg4iIMHD6K6uhpPPvkkrr/+euTk5NgUB9nZ2cjJyYHFYsHY2BiGh4fR1dUFnU6HkJAQGI1G9PT0eN0V0FOoVCrU1tYiPDzcqy6MPB4PMTExiImJoRueXq+nIwWWh8F2U6Kiomg3hRRkzc3NE0Yqw8PDuOGGG9DR0YHq6mqUlJR4Zd3extGjR5GUlEQLAQD4xS9+gZCQEHz77be4/PLLnb72rbfewptvvon09HT86le/4ow5UhDTR7AYOIuxZcsWrF+/ftLn5OTkePS9SfU/ODhIXdPIf7NjgyACBx6Ph/T0dPzud7/D7373O1itVsjlcto5eOmll/DHP/4Rc+fOpV4HM2fOxNatW7F27VrccsstMJvNdDPs6OigRkjklOztGftksFqt6Ovrg1QqRWZmJnJycnxemBB7b/J+Z3kYJFOAOH4mJCRgdHQU4+PjWLx4MZKTk+n3OXLkCNavX4/S0lKcPHnSxqqZaxgYGJiQdxEWFoaUlJRJu37XXHMNsrKykJGRgdraWtxzzz2QSqV4//33fb3kIPyAYDFwFoP1Pvc2srOzkZ6ejq+++opu/mNjY/j222/xxz/+0aXvESQp+Rc8Hg8pKSm47LLLcNlll1Fjo8OHD+PAgQN48skn0d7ejoULF0IsFuPNN9/EsmXLUFhYiKysLBtXQLlcju7ubhiNRhsL5cTERJ+ME4ikUSaTYeHChQGz2LbPFCCjloGBAbS0tMBisSAsLAyffvopWlpasGLFCpw6dQrbt2/HI488gs2bNwess+Jqp9BTbNy4kf5/kUiE2bNn44ILLkBraytyc3M9/r5BcAPBYuBnAneljDweD5s3b8a2bduQn59PpYUZGRk2HuWT4Q9/+AP6+/uxf/9+SlLauHHjpCQlANiwYcMEklIQ7oPH4yEhIQHl5eV45ZVXoFar8dFHHyEmJgYHDhzAf/7zH9x3333UJZGELwmFQpsZOykO6uvrodfrqRES6R5M1whpbGwMYrEYUVFRKC8v55SkMSQkBBqNBgMDA8jOzkZWVhbGx8cxNDSEmpoaPPvss9BqtSgpKYFGo8GhQ4dQWloaEOmtq53C9PR0DA0N2TxuMpkgk8nc4gMQ06GWlpZgMfATQLAY+JngwQcftJEynnPOOQBspYxSqRRKpZI+5+6774ZarcbGjRuhUCiwdOlSfP755y7d6IIkJe5gZGQEPB4PtbW19MR7/vnnAzijJjhx4gRqamrw9ddf/3/t3WtQU1fXB/B/IhBQBERFqoDFUi4KI4iCoCKKU0CtOlJrmal4pZYBR8DBijfUGQatWrFCi20FbBlEqSKd4tgiEQRFW+UmKLEgSkGhSBElXsBkvx98cx4iFxNLIMj6zZwPOWefnH3yhc3ea6+FyMhI8Pl8TJ06lUuE5ODggDFjxgCAXADerVu35FIGy472GTa7wxhDTU0Nbt26JVcOWV1IJBIuAVP72QoDAwNYWlri/v37cHV1RXh4OMrKynDhwgXExsbC1tYWmZmZvd5fRWcKXVxc8PDhQ1y7do2LaxAKhZBKpdwfeEXI/qFov4xI+i/aWkhUIj4+Hhs2bEBTUxN37sWLF9DW1kZqamqXQUru7u4oKysDY4yClPpAW1sbCgoKuLiDixcvorW1laum92qWxM5SBg8ZMqRDAF5nz7lx4waam5thZ2cnt/6uDtoHMdrZ2XHvIJVKER8fj/DwcHzxxRfYsmWLXEyFrICVum3RfJW3tzfq6+sRFxfHzdpNnjyZm7Wrra2Fh4cHlxejsrISycnJmDt3LoYPH46SkhKEhITAxMSkw7Ie6Z9oZoCoBAUp9U+amppwdnaGs7MzwsLCIJFIUFJSwlVmbJ8lUZYIycnJCUZGRlwiJFlAYnV1NcrKyqCtrS1XX0GWtle2LU/RmYTeIsttYGpqypWkBl4OENavXw+hUIj09HR4eHh0mMng8XhqPxAAXu4KCAoKgoeHBxfP8/XXX3PX29raIBKJ8OTJEwAvs2eeO3cO0dHREIvFMDU1hY+PD7Zu3dpXr0B6GM0MEKUoGqR06tQpHD16FCKRSO6akZERdu7cqXAQolAohIeHB61LqgmpVAqRSCSXCKl9lsTp06fDxcUF+vr6XCKkhw8f4uHDh/j333+5ZShdXV2YmJj0eT2B9iQSCUQiEf755x9MmDBBbsr9xo0bWLZsGUaOHIljx45xyyaEvC1oMECUomhlxqSkpDdaJniVrDjP2bNnFarBQHqXrEqfrGxzXl4eqqqqYGdnxy0rTJs2Dc+fP8e6devg5+cHR0dHtLa2coMEWSIk2aGrq9vrg4MnT56gpKQEfD4fdnZ20NHR4d4vJSUFwcHBCAgIQGRkZK9UjiSkt9EyAVGKugUpxcbGcqVVJ06ciEOHDsHJyanL70tNTcW2bdu40qp79uyh0qr/AY/H47Ikrlq1Si5LYm5uLnbt2oXy8nIMHToUFhYWaG5uhoaGBkxMTMDj8bhESE1NTXjw4AEqKirA4/HkYg5UXWyovr4eN27cwOjRo+VSHj99+hQbN25EWloakpKSsGDBArWYwQCoCinpeTQzQFRG1UFKx48fh5+fH+Li4uDs7Izo6GikpqZCJBJ1iFcAXiaGcXNzQ1RUFObPn4/k5GTs2bMHBQUFsLW1VfnvMdBIJBJERkZi9+7d8PX1hba2NvLy8lBaWopx48ZxywrTp0+HmZkZNzhoaWmRKzbUPhGSLPlPTyRCkkql+Ouvv3Dv3j2MHz9eLvV2ZWUl/Pz8oKGhgePHj79x8i5ViYiIgIGBAWpqanDkyBGFBgN79uxBVFSUXBXS69evUxVS8hIjREUaGxuZr68v09XVZXp6emzlypXs8ePH3PWqqioGgJ0/f54xxlh1dTVzc3NjhoaGTCAQMAsLCxYWFsaam5s7/X4nJycWGBjIfZZIJGz06NEsKiqq0/Yff/wxmzdvntw5Z2dntnbt2v/4pqQzycnJzNLSkhUWFnLnpFIpa2xsZGlpaSwkJIRNmTKFDRo0iJmZmTFfX18WExPDioqK2OPHj5lYLGYtLS2svr6elZeXs/z8fHbmzBn2yy+/sOzsbFZcXMyqq6vZo0ePmFgsVup48OABEwqFLCsrizU0NHDnW1paWHJyMtPX12cBAQHs2bNnffgLvl5CQgLT19d/bTupVMqM+0mu2wAADTpJREFUjY3Z3r17uXMPHz5kAoGAHTt2TJVdJP0EzQyQfqm1tRWDBw/Gzz//LJcESVYyNj09vcM9ZmZmCA0NRXBwMHcuIiICp0+fRnFxca/0eyCRSqV4+vQphgwZ0mUb9v9ZEi9duoTs7Gzk5eXhzz//hKGhoVx9BRsbG/D5fDDG8OTJE7ntjM+fP4eenp5cGuXu1vUbGhpQWlqKUaNGwcrKiptlaG1txbZt23D06FEcPnwYn3zyidosC3SFqpCSnkIxA6RfevDgASQSSadVFcvLyzu9p66ujqow9iI+n9/tQAD4X5ZELy8veHl5cVkPL1++jJycHLksiS4uLtyygp2dXbeJkNpXIpQlQpJKpaisrMTff/8NGxsbuTiU2tpa+Pn54fHjx7hy5QpsbGxU+tv0NqpCSl6HBgOEELUhqyw4e/ZspbMkyv64d1aJUEdHBxKJBDweTy6bIGMMWVlZWLVqFebPn4+YmJhua2eoElUhJX2JBgOkXxoxYgQGDRqE+vp6ufP19fVdpjI2NjZWqj1RD9ra2pgxYwZmzJiBzZs348WLFygoKEBOTg5yc3Px1VdfcVkSZcsKkydPxqhRo8Dj8ZCRkYEXL15AX18ffD4feXl5CAsLg729PbS1tXHmzBkcPHgQa9as6dNlAapCSvoSDQZIv6SlpQVHR0dkZWVxMQNSqRRZWVkICgrq9B4XFxdkZWXJxQxkZmbCxcWlV/pMeoaGhgacnJzg5OTEZUm8fv26XOnm5uZmODo6QldXFzk5OYiNjYWnpyf4fD7EYjG2bNmCpKQkiEQitLW1YefOncjOzoabmxt8fX2hp6fX6++l7lVIyVuuL6MXCfkvUlJSmEAgYImJiezGjRvss88+YwYGBqyuro4xxtiyZcvYpk2buPYXL15kGhoabN++fezmzZssIiKCaWpqsuvXryv13JiYGDZ27FgmEAiYk5MTu3LlSpdtExISGAC5QyAQvNkLE4VIJBKWm5vLbGxsmJ6eHrO1tWUaGhpsypQpbP369WzXrl3M2NiY+fj4sKamJiYWi5lQKGQ7duxgs2fPZk1NTX39Cq919+5dVlhYyHbu3Ml0dXVZYWEhKywslNutY2VlxU6dOsV93r17NzMwMGDp6emspKSELVy4kJmbm7OnT5/2xSsQNUODAdKvHTp0iJmZmTEtLS3m5OTELl++zF2bOXMmW758uVz7EydOMEtLS6alpcUmTJjAMjIylHpeSkoK09LSYvHx8aysrIz5+/szAwMDVl9f32n7hIQEpqenx+7fv88dssEKUY1bt26x0aNHsyVLlrDm5mYmlUpZZWUlO3LkCFu+fDkTCARs3bp1TCKR9HVX39jy5cs7DDLRbpsuY4wBYAkJCdxnqVTKtm3bxkaNGsUEAgHz8PBgIpGo9ztP1BJtLSRECc7OzpgyZQpiYmIAvFyaMDU1xbp167Bp06YO7RXd+kV6TltbG06ePImlS5d2GgPQ1tYGDQ0Ntd82SEhvUl2OT0LeMq2trbh27RrmzJnDnePz+ZgzZw7y8/O7vK+lpQVjx46FqakpFi5ciLKyst7o7oClqanZbY4ATU1NGggQ8goaDBCioO5yG3S1V9vKygrx8fFIT09HUlISpFIpXF1dUVNT0xtdJoQQhdBggBAVcnFxgZ+fH+zt7TFz5kycOnUKI0eOxOHDh/u6a6QPRUZGwtXVFYMHD4aBgYFC96xYsQI8Hk/u8PLyUnFPyUBBWwsJUdCb5DZ4laamJhwcHFBRUaGKLpJ+orW1FUuWLIGLiwuOHDmi8H1eXl5ISEjgPgsEAlV0jwxANDNAiILa5zaQkeU2UDRXgWxPfFclmTtz4cIFfPjhhxg9ejR4PB5Onz792nuys7MxadIkCAQCWFhYIDExUeHnEdXbuXMnQkJCYGdnp9R9AoEAxsbG3DFs2DAV9ZAMNDQYIEQJoaGh+P7773H06FHcvHkTAQEBEIvFWLlyJQDAz88P4eHhXPtdu3bh999/x+3bt1FQUIBPP/0Ud+/exZo1axR+plgsxsSJExEbG6tQ+6qqKsybNw+zZs1CUVERgoODsWbNGvz222/KvSxRO9nZ2TAyMoKVlRUCAgLQ2NjY110ibwlaJiBECUuXLkVDQwO2b9+Ouro62Nvb4+zZs1xQYXV1Nfj8/42xm5qa4O/vj7q6OgwbNgyOjo64dOkSxo8fr/Azvb294e3trXD7uLg4mJubY//+/QAAGxsb5OXl4cCBA/D09FT4e4h68fLywuLFi2Fubo7Kykps3rwZ3t7eyM/P5yovEvKmKM8AIf0Ij8dDWlqaXNnmV7m5uWHSpEmIjo7mziUkJCA4OBjNzc290c0B6U0KDf2XPBSyssTnzp2Dh4eH0vcT0h7NDBDylumqVPOjR4/w9OlT6Ojo9FHP3m6qLDTU1XeNGDECFRUVNBgg/xkNBgghpAeostBQZ2pqatDY2KhUMCohXaEAQkLeMl2VatbT06NZATVRXV2NoqIiVFdXQyKRoKioCEVFRWhpaeHaWFtbIy0tDcDLLJZhYWG4fPky7ty5g6ysLCxcuBAWFhYUB0J6BA0GCHnLyEo1t/cmpZqV3dKYnZ3dISkOj8frMjvjQLZ9+3Y4ODggIiICLS0tcHBwgIODA65evcq1EYlEXIzHoEGDUFJSggULFsDS0hKrV6+Go6MjcnNzKdcA6RG0TECImmtpaZFLUlRVVYWioiIYGhrCzMwM4eHhqK2txY8//ggA+PzzzxETE4ONGzdi1apVEAqFOHHiBDIyMpR6rmxL46pVq7B48WKF7xOJRNDT0+M+GxkZKfXcgSAxMfG1uR/ax3br6OjQ1lCiUjQYIETNXb16FbNmzeI+h4aGAgCWL1+OxMRE3L9/H9XV1dx1c3NzZGRkICQkBAcPHoSJiQl++OEHpaeTld3SKGNkZKRwil1CiHqgwQAhas7d3R3d7QDu7D9Md3d3FBYWqrBXXbO3t8fz589ha2uLHTt2YNq0aX3SD0KI4ihmgBDSI9555x3ExcXh5MmTOHnyJExNTeHu7o6CgoK+7lqPunPnDlavXg1zc3Po6OjgvffeQ0REBFpbW7u979mzZwgMDMTw4cOhq6sLHx+fDoGehPQVmhkghPQIKysrWFlZcZ9dXV1RWVmJAwcO4KeffurDnvWs8vJySKVSHD58GBYWFigtLYW/vz/EYjH27dvX5X0hISHIyMhAamoq9PX1ERQUhMWLF+PixYu92HtCOkcZCAkhr6VI5sPOhIWFIS8vD/n5+SrqmXrYu3cvvv32W9y+fbvT683NzRg5ciSSk5Px0UcfAXg5qLCxsUF+fj6mTp3am90lpANaJiCEqExRUdGASIrT3NwMQ0PDLq9fu3YNbW1tmDNnDnfO2toaZmZmb/1AifQPNBgghHSqpaWFS4YD/G9Lo2znQnh4OPz8/Lj20dHRSE9PR0VFBUpLSxEcHAyhUIjAwEClnhsVFYUpU6Zg6NChMDIywqJFiyASiV57X2pqKqytraGtrQ07OzucOXNGqee+qYqKChw6dAhr167tsk1dXR20tLQ67LIYNWoU5WEgaoEGA4SQTl29epVLhgO83NLo4OCA7du3A0CHLY2tra3YsGED7OzsMHPmTBQXF79REZ2cnBwEBgbi8uXLyMzMRFtbGz744AOIxeIu77l06RJ8fX2xevVqFBYWYtGiRVi0aBFKS0sVfu6mTZs6TZrU/igvL5e7p7a2Fl5eXliyZAn8/f2Vek9C1AnFDBBC1FpDQwOMjIyQk5MDNze3TtssXboUYrEYv/76K3du6tSpsLe3R1xcnMLPaWxs7LbNuHHjoKWlBQC4d+8e3N3dMXXqVCQmJsqVrn6VUCiEh4cHmpqa5GYHxo4di+DgYISEhCjUR0JUhXYTEELUmiwlb3dr8vn5+VwyJhlPT8/XplBuT5lCQ7W1tZg1axYcHR2RkJDQ7UAAABwdHaGpqYmsrCz4+PgAeJmpsbq6Wuk00YSoAi0TEELUllQqRXBwMKZNmwZbW9su23VVtlkV6/G1tbVwd3eHmZkZ9u3bh4aGBtTV1ck9q7a2FtbW1vjjjz8AAPr6+li9ejVCQ0Nx/vx5XLt2DStXroSLiwvtJCBqgWYGCCFqKzAwEKWlpcjLy+vrrnAyMzNRUVGBiooKmJiYyF2Trbq2tbVBJBLhyZMn3LUDBw6Az+fDx8cHz58/h6enJ7755pte7TshXaGYAUKIWgoKCkJ6ejouXLgAc3PzbtuamZkhNDQUwcHB3LmIiAicPn0axcXFqu4qIf0eLRMQQtQKYwxBQUFIS0uDUCh87UAA6LmyzYQMVLRMQAhRK4GBgUhOTkZ6ejqGDh3KrcXr6+tDR0cHAODn54cxY8YgKioKALB+/XrMnDkT+/fvx7x585CSkoKrV6/iu+++67P3IKQ/oWUCQoha4fF4nZ5PSEjAihUrALysyvjuu+/KVWxMTU3F1q1bcefOHbz//vv48ssvMXfu3F7oMSH9Hw0GCCGEkAGOYgYIIYSQAe7/ABpapNTG4aaWAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Python provides powerful libraries to plot\n",
    "# vectors and curves and surfaces in 3D. Some\n",
    "# examples.\n",
    "def plot_vector(ax, row_vector, color=\"cyan\"):\n",
    "    \"\"\"\n",
    "    Plot a 3D vector in specified color\n",
    "    \"\"\"\n",
    "    assert len(row_vector == 3)\n",
    "    v = torch.squeeze(row_vector)\n",
    "    ax.quiver(0, 0, 0, row_vector[0], row_vector[1],\n",
    "              row_vector[2], color=color)\n",
    "\n",
    "    \n",
    "from mpl_toolkits.mplot3d import Axes3D    \n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "ax.set_xlim([-2, 2])\n",
    "ax.set_ylim([-2, 2])\n",
    "ax.set_zlim([-2, 2])\n",
    "\n",
    "# Let us now visualise the vectors in 3D \n",
    "u = torch.tensor([1, 1, 1], dtype=torch.float)\n",
    "\n",
    " #Reshape to represent as a row vector\n",
    "u_row = u.reshape((3, 1))\n",
    "plot_vector(ax, u_row, color=\"blue\")\n",
    "\n",
    "# Rotate it 45 degrees around Z axis\n",
    "R = rotation_matrix_3d(45, 2)\n",
    "v_row = torch.matmul(R, u_row)\n",
    "plot_vector(ax, v_row, color=\"green\")\n",
    "\n",
    "# Rotate again by 45 around X axis\n",
    "R = rotation_matrix_3d(45, 0)\n",
    "w_row = torch.matmul(R, u_row)\n",
    "plot_vector(ax, w_row, color=\"red\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Orthogonality of rotation matrices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matrix to rotate in-plane by 30 degreesabout origin:\n",
      "tensor([[ 0.8660, -0.5000],\n",
      "        [ 0.5000,  0.8660]])\n",
      "Original vector u:\n",
      "tensor([[4.],\n",
      "        [0.]])\n",
      "Rotated Vector v:\n",
      "tensor([[3.4641],\n",
      "        [2.0000]])\n",
      "Length of u: 4.0\n",
      "Length of v: 4.0\n"
     ]
    }
   ],
   "source": [
    "R_30 = rotation_matrix_2d(30)\n",
    "\n",
    "print(\"Matrix to rotate in-plane by 30 degrees\"\n",
    "      \"about origin:\\n{}\".format(R_30))\n",
    "# Inverse of rotation matrix is same as the transpose, this\n",
    "# is orthogonality.\n",
    "\n",
    "# torch.allclose is used to determine if all elements are equal\n",
    "# within tolerance. The inv(erse) and transpose of rotation\n",
    "# matrix should be equal (due to floating point errors may\n",
    "# not be perfectly equal, hence we check for closeness\n",
    "# with very low tolerance).\n",
    "assert torch.allclose(torch.linalg.inv(R_30),\n",
    "                   R_30.T)\n",
    "# Equivalently, if we multiply a rotation matrix and its\n",
    "# transpose, we get the identity matrix.\n",
    "# torch.eye(N) returns an N x N Identity matrix.\n",
    "assert torch.allclose(torch.matmul(R_30, R_30.T),\n",
    "                   torch.eye(2))\n",
    "\n",
    "# Let us take a random point (4, 0)\n",
    "u = torch.tensor([[4],[0]], dtype=torch.float)\n",
    "\n",
    "# Rotate it by 30 degrees\n",
    "v = torch.matmul(R_30, u)\n",
    "\n",
    "print(\"Original vector u:\\n{}\".format(u))\n",
    "print(\"Rotated Vector v:\\n{}\".format(v))\n",
    "\n",
    "print(\"Length of u: {}\".format(torch.linalg.norm(u)))\n",
    "print(\"Length of v: {}\".format(torch.linalg.norm(v)))\n",
    "\n",
    "# We assert that rotation is length preserving\n",
    "assert torch.linalg.norm(u) == torch.linalg.norm(v)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matrix to rotate in-plane by -30 degrees about origin\n",
      "tensor([[ 0.8660,  0.5000],\n",
      "        [-0.5000,  0.8660]])\n",
      "Re-Rotated Vector w:\n",
      "tensor([[4.],\n",
      "        [0.]])\n"
     ]
    }
   ],
   "source": [
    "# Let us now negate the rotation i.e rotate the point\n",
    "# back by -30 degrees\n",
    "R_neg30 = rotation_matrix_2d(-30)\n",
    "\n",
    "print(\"Matrix to rotate in-plane by -30 degrees\"\n",
    "      \" about origin\\n{}\".format(R_neg30))\n",
    "\n",
    "# We will rotate v by -30 degrees\n",
    "w = torch.matmul(R_neg30, v)\n",
    "print(\"Re-Rotated Vector w:\\n{}\".format(w))\n",
    "\n",
    "# We assert that this vector is the same as the original\n",
    "# vector u\n",
    "assert torch.all(w == u)\n",
    "\n",
    "# We also assert that R_neg30 is the transpose and\n",
    "# the inverse of R_30\n",
    "assert torch.allclose(R_30, R_neg30.T)\n",
    "assert torch.allclose(torch.matmul(R_30, R_neg30), torch.eye(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Axis of rotation is: tensor([0.+0.j, 0.+0.j, 1.+0.j])\n",
      "Point of axis of rotation: tensor([0.+0.j, 0.+0.j, 2.+0.j])\n"
     ]
    }
   ],
   "source": [
    "import torch.linalg as LA\n",
    "# Let us now compute the eigen values and eigen vectors of\n",
    "# the rotation matrix\n",
    "\n",
    "# Matrix for rotation by 45 degrees about origin.\n",
    "R = torch.tensor([[0.7071, 0.7071, 0], [-0.7071, 0.7071, 0],\n",
    "              [0, 0, 1]])\n",
    "# As seen in the previous section, A is a rotation matrix\n",
    "# around the Z axis\n",
    "l, e = LA.eig(R)\n",
    "\n",
    "# We know that all rotation matrices will have 1 as one of\n",
    "# its eigenvalues.\n",
    "# The eigen vector corresponding to that value is the axis\n",
    "# of rotation\n",
    "\n",
    "# torch.where returns the indices where the specified condition\n",
    "# is satisfied.\n",
    "axis_of_rotation = e[:, torch.where(l == 1.0)]\n",
    "\n",
    "# torch.squeeze is used to remove dimensions of size 1\n",
    "axis_of_rotation = torch.squeeze(axis_of_rotation)\n",
    "\n",
    "print(\"Axis of rotation is: {}\".format(axis_of_rotation))\n",
    "\n",
    "# Let us take a random point on the axis of rotation \n",
    "p = torch.randint(0, 10, (1,)) * axis_of_rotation\n",
    "print(\"Point of axis of rotation: {}\".format(p))\n",
    "\n",
    "# Point on the axis of rotation remain unchanged even\n",
    "# after rotation. Thus vector p and its transform Rp\n",
    "# are close.\n",
    "\n",
    "assert torch.allclose(torch.matmul(R, p.real), p.real)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
